问题描述
我绝对不熟悉C和gdb
,但不是编程人员。
我想调试失败的单元测试引用的库。每个单元测试都有一个子进程(我假定保持内存分离),并且我不愿意更改它以在单个进程中运行。相反,我想告诉我的gdb
自动跟踪由我的gdb
运行的父进程创建的每个子进程。
正确的做法是什么?
解决方法
我想告诉我的gdb自动跟踪由我的gdb运行的父进程创建的每个子进程。
您可以编写一个Python程序来做到这一点(假设最近使用嵌入式Python构建的GDB)。
通常更容易的方法是像这样修改失败的测试用例(我在这里使用gUnit示例,但是使用相同的技术works in general):
TEST(Foo,Bar) {
// Start added code.
volatile int go = 0; // Modified from GDB.
while (go == 0) {
fprintf(stderr,"Run 'gdb -p %d'\n",getpid());
sleep(1);
}
// End.
EXPECT_EQ(123,Bar()); // This is the test which fails.
}
现在只需运行所有测试,在运行测试用例时附加GDB,根据需要设置断点,将go
设置为1并将continue
设置。
P.S。大多数测试框架已经具有在故障时附加调试器的机制。如果您要处理的不是这样,则可能需要修复那个。