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