如何强制gdb在程序执行开始后立即停止?

时间:2013-09-09 08:50:49

标签: debugging gdb

我试图在每个有意义的函数上设置断点,但程序在到达任何一个之前都会退出。有没有办法让程序从一开始就以分步模式运行,这样我才能看到发生了什么?

我正在尝试调试/ usr / bin / id,如果它很重要(我们有自定义插件,并且行为不端)

P.S。启动命令对我来说不起作用(它应该是注释,但我没有足够的代表)

3 个答案:

答案 0 :(得分:4)

使用start命令

  

'start'命令相当于在主过程开始时设置临时断点,然后调用'run'命令。

e.g。

调试信息主要的程序,以及如下用法: main arg1 arg2

gdb main
(gdb) start arg1 arg2

答案 1 :(得分:3)

获取程序入口点地址并在该地址处插入断点。

执行此操作的一种方法是执行信息文件,例如“入口点:0x4045a4”。然后做“break * 0x4045a4”。在运行程序之后,它会立即停止。

从这里开始,您可以使用单步执行指令(如步骤或步骤)继续。

您没有告诉您要调试哪个系统。如果代码在只读内存中,则可能需要使用硬件断点(hbreak),如果该系统支持它们。

答案 2 :(得分:2)

您可以在record full程序之后立即输入run。这将记录所有指令并使其可以重播/返回。

对于main函数,您需要在到达断点之前键入此值,以便您可以通过break _start - >设置较早的值。 _start是在标准main函数之前始终调用的函数。 (显然仅适用于gcc编译器或类似的)

然后continue到主断点并执行reverse-stepi只返回一条指令

有关录制的详细信息,请点击此处:link