c - 将`gdb`与动态分配的子进程一起使用?
问题描述
我绝对是 C 和 的新手gdb
,但不是编程。我想调试失败的单元测试引用的库。每个单元测试都有一个子进程(我假设保持内存分离),我不愿意将其更改为在单个进程中运行。相反,我想告诉我gdb
自动跟踪gdb
由我运行的父进程创建的每个子进程。
正确的方法是什么?
解决方案
我想告诉我的 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 大多数测试框架已经有一种机制可以在失败时附加调试器。如果您正在处理一个不存在的问题,您可能需要修复它。
推荐阅读
- java - 具有相同返回类型的方法的 Mockito 默认行为和自定义行为
- ubuntu - 为什么 Docker 在我的 Selenium 项目中看不到驱动程序可执行文件?它抛出驱动程序可执行文件不存在
- javascript - 如何在 textarea 下放置一个 div 并能够处理其上的事件?
- java - Json 没有出现
- robotium - Botium-脚本内存
- javascript - 单击按钮时更改 div 内容
- git - 为什么我的 Git 子模块会自动将 HEAD 分离到特定的提交?
- thymeleaf - Thymeleaf:在没有应用程序上下文路径的情况下获取 href
- forms - 上传到 Asset Store 时 Xamarin.Forms 缺少 120x120
- ruby-on-rails - Ruby on Rails [heroku] git push heroku master 错误