我试图在每个有意义的函数上设置断点,但在到达其中任何一个之前程序退出。有没有办法让程序从一开始就以逐步模式运行,这样我就可以看到发生了什么?
如果它很重要,我正在尝试调试 /usr/bin/id (我们有自定义插件并且它行为不端)
PS Start 命令在这里对我不起作用(应该是评论,但我没有足够的代表)
获取程序入口点地址并在该地址处插入断点。
一种方法是执行信息文件,例如“入口点:0x4045a4”。然后执行“break *0x4045a4”。运行程序后,它会立即停止。
从这里开始,您可以使用单步说明(如 step 或 stepi)继续。
您没有告诉您要调试的系统是什么。如果代码位于只读内存中,则您可能需要使用硬件断点 (hbreak)(如果该系统支持它们)。
使用启动命令
“start”命令相当于在主过程开始时设置一个临时断点,然后调用“run”命令。
例如
带有调试信息main的程序,用法如下:main arg1 arg2
gdb main
(gdb) start arg1 arg2
您可以在程序record full
完成后run
立即键入。这将记录所有指令并使它们可以重播/返回。
对于 main 函数,您需要在到达断点之前键入 this,以便您可以通过break _start
-> _start 设置更早的一个函数,该函数始终在标准 main 函数之前调用。(显然只适用于 gcc 编译器或类似的)
然后continue
到主断点并执行reverse-stepi
返回一条指令
有关录制的更多信息,请参见此处:链接