我正在尝试为我的 C 应用程序使用检查 单元测试框架。但由于两点,我不能使用调试器(gdb):
首先,检查是否使用了一些复杂的宏(
START_TEST
和END_TEST
),调试器无法在我的代码中在这两个宏之间设置断点(事实上,我可以设置软件断点,但 gdb 从未见过)其次,检查通过重新定义中断行为来定义某种异常。因此,当我尝试设置硬件断点时,测试失败并退出,因为检查将硬件断点视为我的测试失败。
有没有人已经遇到过这个问题并有解决方案?
我正在尝试为我的 C 应用程序使用检查 单元测试框架。但由于两点,我不能使用调试器(gdb):
首先,检查是否使用了一些复杂的宏(START_TEST
和END_TEST
),调试器无法在我的代码中在这两个宏之间设置断点(事实上,我可以设置软件断点,但 gdb 从未见过)
其次,检查通过重新定义中断行为来定义某种异常。因此,当我尝试设置硬件断点时,测试失败并退出,因为检查将硬件断点视为我的测试失败。
有没有人已经遇到过这个问题并有解决方案?
看看no-fork 模式:
通常检查分叉以创建单独的地址空间。这允许捕获和报告信号或提前退出,而不是取消整个测试程序,并且通常非常有用。但是,当您尝试调试发生分段错误或其他程序错误的原因时,分叉会使调试工具的使用变得困难。
实际上,你也可以使用 fork-mode。
gdb 有两个与 fork 行为相关的有趣选项:-(将此设置为 false)
-
(父母或孩子;我总是带孩子) detach-on-fork
follow-on-fork
这将使 gdb 跟随子进程。当子进程结束时,您必须使用命令手动切换回父进程inferior
。
我读了这个,他提出了一个非常简单的解决方案:
gdb > set environment CK_FORK=no
这对我有用。然后我可以在测试用例调用的函数(即被测函数)中设置一个断点,它在正确的位置中断。