7

我正在尝试为我的 C 应用程序使用检查 单元测试框架。但由于两点,我不能使用调试器(gdb):

  • 首先,检查是否使用了一些复杂的宏(START_TESTEND_TEST),调试器无法在我的代码中在这两个宏之间设置断点(事实上,我可以设置软件断点,但 gdb 从未见过)

  • 其次,检查通过重新定义中断行为来定义某种异常。因此,当我尝试设置硬件断点时,测试失败并退出,因为检查将硬件断点视为我的测试失败。

有没有人已经遇到过这个问题并有解决方案?

4

4 回答 4

12

看看no-fork 模式

通常检查分叉以创建单独的地址空间。这允许捕获和报告信号或提前退出,而不是取消整个测试程序,并且通常非常有用。但是,当您尝试调试发生分段错误或其他程序错误的原因时,分叉会使调试工具的使用变得困难。

于 2009-10-30T14:48:51.470 回答
7

实际上,你也可以使用 fork-mode。

gdb 有两个与 fork 行为相关的有趣选项:-(将此设置为 false)
- (父母或孩子;我总是带孩子) detach-on-fork
follow-on-fork

这将使 gdb 跟随子进程。当子进程结束时,您必须使用命令手动切换回父进程inferior

于 2010-09-04T06:50:19.870 回答
1

我读了这个,他提出了一个非常简单的解决方案:

gdb > set environment CK_FORK=no

这对我有用。然后我可以在测试用例调用的函数(即被测函数)中设置一个断点,它在正确的位置中断。

于 2018-05-18T23:26:12.860 回答
0

试试TAP(测试任何协议)……它更容易实现、发布和调试。它也很容易让它valgrind感知并倾向于与gdb.

于 2009-10-30T14:43:33.570 回答