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

Men*_*dor 5 debugging gdb

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

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

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

dbr*_*nk0 6

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

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

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

您没有说明您要调试的系统。如果代码在只读内存中,您可能需要使用硬件断点 (hbreak),前提是该系统支持它们。


Tim*_*mmm 6

使用starti。与此不同的是start,它停在实际的第一条指令处,而不是停在 处main()


小智 5

使用启动命令

\n\n
\n

\xe2\x80\x98start\xe2\x80\x99 命令相当于在主过程的开头设置临时断点,然后调用 \xe2\x80\x98run\xe2\x80\x99 命令。

\n
\n\n

例如

\n\n

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

\n\n
gdb main\n(gdb) start arg1 arg2\n
Run Code Online (Sandbox Code Playgroud)\n

  • 仅当程序具有 _main_ 符号时这才有效。如果您正在调试一个无法工作的组件。 (2认同)