GDB 步骤延迟

71G*_*1GA 6 bash gdb

我正在对 ARM 汇编代码执行进行很好的演示,我需要 GDB 每 1 秒无限长地步进代码(直到我按CTRL+ C)。有人有解决方案吗?

当访客来我的摊位时,我不想继续站在键盘旁边并踩着程序。

Mar*_*ick 11

Gdb 的 CLI 支持while循环。没有内置sleep命令,但是您可以调用 shell 来运行sleep程序,或者使用 gdb 的内置 python 解释器(如果有的话)。它可以被 Control-C 打断。

方法一:

(gdb) while (1) 
 > step 
 > shell sleep 1 
 > end

方法二:

(gdb) python 导入时间
(gdb) while (1) 
 > step 
 > python time.sleep(1) 
 > end

方法三(定义一个宏):

(gdb)定义运行缓慢
键入用于定义“runslowly”的命令。
以一行说“结束”结束。
> python 导入时间
> while(1) 
 > step 
 > python time.sleep(1) 
 > end 
> end 
(gdb)文档运行缓慢
为“runslowly”键入文档。
以一行说“结束”结束。
>一次走一行,每 1 秒一次
>结束

(gdb) 运行缓慢


thr*_*rig 7

expect 可以自动化这个

#!/usr/bin/env expect
spawn -noecho gdb -q ls
expect -ex {(gdb)}
send -- "break main\r"
expect -ex {(gdb)}
send -- "run\r"
while {1} {
    expect -ex {(gdb)}
    send -- "s\r"
    sleep 1
}
Run Code Online (Sandbox Code Playgroud)

或者如果有程序用完的风险,s你可以重复gdb它,但稍微复杂一点

#!/usr/bin/env expect

while {1} {
    spawn -noecho gdb -q ls
    expect -ex {(gdb)}
    send -- "break main\r"
    expect -ex {(gdb)}
    send -- "run\r"
    expect {
        -ex {The program is not being run} {}
        eof {}
        -ex {(gdb)} {
            send -- "s\r"
            sleep 1
            exp_continue
        }
    }
}
Run Code Online (Sandbox Code Playgroud)