断点是大多数流行调试器(如GDB)支持的最酷功能之一。但断点如何运作?编译器为实现断点做了哪些代码修改?是否有用于支持断点的特殊硬件功能?
答案 0 :(得分:24)
编译器不需要以任何方式“修改”二进制文件来支持断点。但重要的是:
答案 1 :(得分:1)
首先要设置一个断点,我们必须在二进制文件中添加一些特殊信息。我们在编译c源文件时使用标志-g来包含这个信息。软件调试器实际上使用这个信息来放置断点。硬件断点支持的最佳示例是我所经历的VxWorks。 基本上在断点处处理器停止。所以内部任何给处理器例外的步骤都可以用来设置软件断点。虽然硬件断点通过匹配存储在硬件寄存器中的地址来引起异常。所以硬件断点非常强大,但它依赖于架构。
这里有一个很好的解释 What is the difference between hardware and software breakpoints? 这里给出了与处理器相关的信息的简介 http://processors.wiki.ti.com/index.php/How_Do_Breakpoints_Work