0

我正在尝试在 gdb 中调试低级 C 程序。有问题的程序旨在充当包装器,启动另一个进程并监视/干扰其内存使用。

当我在 gdb 中加载程序时,起初一切似乎都很正常(如果不理想的话)。我看到新的进程分叉,然后它挂起。这本身并不会太奇怪。我的代码中某处可能出现死锁或无限循环。

但是,如果我在 gdb 中中断并终止该进程,然后在同一个 gdb 会话中再次运行它,则一切正常。运行大约需要半秒钟,并且完全按照应有的方式运行。

所以我的问题是:gdb 在我的程序运行之间保留了什么?第一次和第二次执行之间会发生什么变化?

4

1 回答 1

0

我找到了原因,尽管我仍然不明白为什么 gdb 会这样。但我会把它贴在这里,以防它对其他人有用。

我启动了 gdb:

gdb --args ./mywrapper testers_exe/tester-2

第一次运行时:

/home/用户名/mywrapper testers_exe/tester-2

但是当被杀死并再次运行时,它模仿了最近的进程,而不是它给出的参数:

/home/用户名/testers_exe/tester-2 testers_exe/tester-2

因此它在没有包装器的情况下运行测试,并避免了包装器的无限循环。

于 2016-09-30T17:51:47.900 回答