我尝试从命令行使用gdb启动程序,然后立即用命令添加断点,然后运行:
gdb -q -ex 'set pagination off' -ex 'break XOpenDisplay' \
-ex 'commands' -ex 'silent' -ex 'info locals' -ex 'bt full' \
-ex 'cont' -ex 'end' -ex 'r' ./myprogram
程序在
commands
提示我通过键盘输入命令然后输入end
后卡住了。
我是不是忘记了什么?
问候
更新:
我添加了一个包含以下内容的.gdbinit:
gdb -q -ex breakXOpenDisplayRun
define breakXOpenDisplayRun
set pagination off
break XOpenDisplay
commands
silent
info locals
bt full
cont
end
run
end
gdb -q -ex breakXOpenDisplayRun ./myapp
当程序第一次遇到断点时,它会停在那里,提示用户输入,这是不应该发生的。第一次连续后,它按预期工作。
-ex
需要一个 complete 命令,在 commands
的情况下,完整命令是
commands
silent
info locals
bt full
cont
end
虽然您可以在 shell 提示符下输入多行命令,但这样做非常尴尬,而且您最好将所有所需的命令放入临时命令文件中。像这样的东西应该有效:
cat > /tmp/gdb.$$ <<"EOF" && gdb -x /tmp/gdb.$$ ./myprogram && rm -f /tmp/gdb.$$
set pagination off
break XOpenDisplay'
commands
silent
info locals
bt full
cont
end
run
EOF
感谢 gdb 邮件列表 Andrew Burgess。这是 gdb 11 中已修复的错误。对于之前的版本,使用单独的源对我有用:
gdb -q -ex '源breakXOpenDisplayRun.gdb'./myapp