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

问题描述 投票:0回答:2

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

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

gdb
2个回答
2
投票

-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

0
投票

感谢 gdb 邮件列表 Andrew Burgess。这是 gdb 11 中已修复的错误。对于之前的版本,使用单独的源对我有用:

gdb -q -ex '源breakXOpenDisplayRun.gdb'./myapp

© www.soinside.com 2019 - 2024. All rights reserved.