【发布时间】:2013-01-30 07:13:18
【问题描述】:
断点是 GDB 等最流行的调试器支持的最酷的功能之一。但是断点是如何工作的?编译器做了哪些代码修改来实现断点?是否有任何特殊的硬件功能用于支持断点?
【问题讨论】:
标签: debugging compiler-construction gdb breakpoints
断点是 GDB 等最流行的调试器支持的最酷的功能之一。但是断点是如何工作的?编译器做了哪些代码修改来实现断点?是否有任何特殊的硬件功能用于支持断点?
【问题讨论】:
标签: debugging compiler-construction gdb breakpoints
编译器不需要以任何方式“修改”二进制文件来支持断点。然而,重要的是:
然后由调试器自己执行其余的工作。
【讨论】:
首先要设置断点,我们必须在二进制文件中添加一些特殊信息。我们在编译 c 源文件时使用标志 -g 来包含此信息。软件调试器实际上使用此信息来放置断点。硬件断点支持的最佳示例是我所经历的 VxWorks。 基本上在断点处处理器停止。因此在内部,任何会给处理器带来异常的步骤都可以用来放置软件断点。而硬件断点通过匹配存储在硬件寄存器中的地址来工作,从而导致异常。所以硬件断点非常强大,但它严重依赖于架构。
这里有一个很好的解释 What is the difference between hardware and software breakpoints? 此处提供了与处理器相关信息的良好介绍 http://processors.wiki.ti.com/index.php/How_Do_Breakpoints_Work
【讨论】: