我正在尝试使用Delphi 2007创建代码覆盖率工具。
我的一般方法是使用Win32 Debug API为每个源代码行插入断点,然后在传递断点时删除断点 - 这样我就可以跟踪每个执行的源代码行。
我的方法概要:
现在回答我的问题:
详细MAP文件中的每个源行地址是否是插入Int3断点的有效地址?
虽然这种方法对于一些简单的单元来说是成功的,但是我试图访问违规地址包含$ cc的一些较大的应用程序的违规行为 - 这会让我认为我的方法需要一些修改才能工作。
关于更好方法的提示也非常受欢迎!
答案 0 :(得分:1)
嗯,理论上:是的。实际上,我也是如此。如果Delphi可以在每一行都放置一个断点,那么你可以: - )。
对于某些情况,您可能需要一些特定的处理(例如:过程的第一行是本地变量的初始化,设置EBP等)。 所以你能找出它在哪种情况下失败了吗?
顺便说一下:好项目!它是开源的吗?P.S。如果你需要一些汇编代码处理:请查看koldetours.pas(使用谷歌搜索)。