如何有效地实现调试器断点?

时间:2009-05-13 16:37:38

标签: debugging implementation

有时我会在代码中的不同位置累积来自不同调试会话的大量断点。调试器如何有效地知道何时停止断点?它不可能在每一行停止检查行号和源文件名与潜在的长断点列表,是吗?

这是Eclipse中的Java调试器,但我认为这个问题适用于任何调试器。

4 个答案:

答案 0 :(得分:7)

许多调试器中使用的策略(我不了解Eclipse)是在断点处将代码放入代码中,这实际上是一个子程序调用或系统调用。跳转到的代码具有断点信息,并执行任何打印或接受用户命令,并且还具有用补丁覆盖的代码,以便可以执行代码以使执行与原始代码匹配,而不会出现断点< / p>

答案 1 :(得分:5)

添加Nadreck的好答案:

有一篇文章here包含更多细节,包括一些更奇特的内容(x86上的特定操作码;硬件断点)。

答案 2 :(得分:2)

调试器在硬件或软件中实现断点。后者需要保存原始指令,插入生成异常的特殊代码,并在引发异常时重新插入原始指令并让用户知道断点已被命中。有关软件断点的详细信息,请阅读my article

答案 3 :(得分:0)

您可以在下面的链接中获取Eclipse Debugger内部的完整详细信息以及如何编写 How to write an Eclipse Debugger