我试图在每个有意义的函数上设置断点,但程序在到达任何一个之前都会退出。有没有办法让程序从一开始就以分步模式运行,这样我才能看到发生了什么?
我正在尝试调试/ usr / bin / id,如果它很重要(我们有自定义插件,并且行为不端)
P.S。启动命令对我来说不起作用(它应该是注释,但我没有足够的代表)
答案 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