程序只在第一次运行时挂起?

时间:2016-09-30 17:31:44

标签: c linux debugging gdb sbrk

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

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

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

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

1 个答案:

答案 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

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