使用check检查C中的调试单元

时间:2009-10-30 13:28:10

标签: c unit-testing debugging gdb check-framework

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

  • 首先,检查使用一些复杂的宏(START_TESTEND_TEST)并且调试器在这两个宏之间的代码中设置断点很麻烦(事实上,我可以放一个软件断点,但gdb从未见过它

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

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

4 个答案:

答案 0 :(得分:11)

查看no-fork mode

  

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

答案 1 :(得分:5)

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

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

这将使gdb遵循子进程。 子进程结束后,您必须使用inferior命令手动切换回父进程。

答案 2 :(得分:0)

尝试TAP(测试任何协议)......实现,发布和调试要容易得多。它也很容易valgrind - 意识到并且往往会更好地使用gdb

答案 3 :(得分:0)

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

gdb > set environment CK_FORK=no

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