nne*_*neo 14
调试器通常可以设置两种不同的断点:软件断点和硬件断点.
软件断点包括用"break"指令替换目标地址处的指令(例如,int 3在x86上)并等待CPU执行它.当该指令被命中时,CPU引发异常并将控制转移到调试器.好处是你可以根据需要定义多个断点,但缺点是这需要修改内存中的程序(这对于只读内存中的程序可能是不可能的,或者可能导致程序的行为不同,如果它读取自己的程序存储器).
另一种是硬件断点,它包括在CPU 中设置一个特殊的调试寄存器,要求它在到达指定地址时断开.当程序计数器到达该地址时,CPU将自动引发异常.好处是不需要软件修改,但缺点是这依赖于有限的资源(调试寄存器),其中可能没有很多.例如,x86处理器通常只有4个调试地址寄存器,因此一次只能设置4个硬件断点.
调试器通常根据可用资源选择策略(例如,前4个断点的硬件断点和其后的软件断点),尽管许多也可以配置为强制使用一种特定类型的断点.例如,流行的调试器GDB具有hbreak显式创建硬件断点的命令.
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |