首页 > 解决方案 > 将`gdb`与动态分配的子进程一起使用?

问题描述

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

正确的方法是什么?

标签: cgdbchild-process

解决方案


我想告诉我的 gdb 自动跟踪由我的 gdb 运行的父进程创建的每个子进程。

您可以编写一个 Python 程序来执行此操作(假设最近使用嵌入式 Python 构建了 GDB)。

通常更简单的方法是像这样修改失败的测试用例(我在这里使用 gUnit 示例,但通常相同的技术适用):

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.

PS 大多数测试框架已经有一种机制可以在失败时附加调试器。如果您正在处理一个不存在的问题,您可能需要修复


推荐阅读