将 `gdb` 与动态分配的子进程一起使用?

Using `gdb` with dynamically allocated child processes?

我绝对是 C 和 gdb 的新手,但不是编程。 我想调试失败的单元测试引用的库。每个单元测试都有一个子进程(我假设保持内存分离),我不愿意在单个进程中将其更改为 运行 。相反,我想告诉我的 gdb 自动 跟踪父进程创建的每个子进程我的 gdb 运行s.

正确的方法是什么?

I'd like to tell my gdb to automatically track each child process created by the parent process my gdb runs.

您可以编写一个 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。大多数测试框架已经具有在失败时附加调试器的机制。如果您正在处理一个不存在的问题,您可能需要修复 that.