在动态分配的子进程中使用`gdb`吗?

问题描述

我绝对不熟悉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。大多数测试框架已经具有在故障时附加调试器的机制。如果您要处理的不是这样,则可能需要修复那个