使用TGDBMIDebugger设置断点为何未生效?
断点式代码覆盖率方案在Lazarus下失效的问题
背景
由于Lazarus暂无可用的代码覆盖率工具,我设计了一个临时方案:在需要检测覆盖的代码行设置断点,当断点命中后自动禁用该断点;待目标程序结束后,通过检查仍处于激活状态的断点对应的行号,来判断哪些代码未被覆盖。但这个方案无法正常工作。
测试环境与代码
目标测试程序
我编写了测试程序hello.lpr,代码如下:
program hello; uses Interfaces, Forms; begin Application.Initialize; Application.MessageBox('Hello, world', 'Hello'); // Line 6 end.
该程序已编译为包含调试信息的hello.exe。
覆盖率检测程序
我开发了用于检测覆盖率的工具lazcov.exe,核心逻辑集中在TCovRunner.Run和TCovRunner.OnBreakPointHit方法中。
问题现象
运行lazcov.exe后,hello.exe能正常在调试器中启动;但点击弹窗的OK按钮结束hello.exe后,调试器报错“无进程运行”,并且显示第6行的断点从未被命中。
疑问
- 为何第6行的断点未生效?
- 调试器或断点的初始化过程是否存在错误?
- 有哪些可行的调试思路可以定位问题?
内容的提问来源于stack exchange,提问作者Dmitry Grigoryev
相关产品推荐
相关产品推荐

