5

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

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

PS Start 命令在这里对我不起作用(应该是评论,但我没有足够的代表)

4

3 回答 3

6

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

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

从这里开始,您可以使用单步说明(如 step 或 stepi)继续。

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

于 2013-09-09T09:17:26.890 回答
5

使用启动命令

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

例如

带有调试信息main的程序,用法如下:main arg1 arg2

gdb main
(gdb) start arg1 arg2
于 2013-09-10T07:50:38.087 回答
2

您可以在程序record full完成后run立即键入。这将记录所有指令并使它们可以重播/返回。

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

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

有关录制的更多信息,请参见此处:链接

于 2017-12-01T02:02:16.907 回答