我试图在gdb中调试低级C程序。有问题的程序旨在充当包装器,启动另一个进程并监视/干扰其内存使用。
当我在gdb中加载程序时,一切看起来都很正常(如果不是理想的话)。我看到新的进程分叉,然后它挂起。就其本身而言,这不会太奇怪;可能是我的代码中某处的死锁或无限循环。
但是如果我在gdb中中断并终止进程,然后在同一个gdb会话中再次运行它,那么一切正常。运行大约需要半秒钟,并且应该完全按照预期行动。
所以我的问题是:我的程序运行之间保留的gdb是什么?第一次和第二次执行之间会发生什么变化?
答案 0 :(得分: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
因此它在没有包装器的情况下运行测试,并避免了包装器的无限循环。