使用 ex 命令从命令行添加断点时出现问题

Problems adding a breakpoint with commands from command line with ex command

我尝试从命令行使用 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

程序在“命令”提示我通过键盘输入命令然后输入“结束”后卡住。

我是不是忘记了什么?

此致

更新:

我添加了一个.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

当程序第一次遇到断点时,它会停在那里提示用户输入,这是不应该发生的。在第一个 cont 之后它按预期工作。

-ex需要一个完整的命令,如果是commands,完整的命令是

commands
  silent
  info locals
  bt full
  cont
end

虽然您 可以 在 shell 提示符下输入 multi-line 命令,但这样做非常笨拙,您最好将所有将所需的命令放入一个临时命令文件中。这样的事情应该有效:

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 'source breakXOpenDisplayRun.gdb' ./myapp