一个命令中的gdb

Vie*_*urs 8 gdb

当我program使用参数调试可执行文件时arg1 arg2gdb我执行以下序列

gdb
file ./program
run arg1 arg2
bt
quit
Run Code Online (Sandbox Code Playgroud)

如何从 shell 脚本中的一个命令行执行相同的操作?

meu*_*euh 16

您可以使用选项在命令行上将命令传递给 gdb -ex。您需要为每个命令重复此操作。当您的程序需要读取 stdin 以便您不想重定向它时,这会很有用。例如,对于od -c

echo abc |
gdb -ex 'break main' -ex 'run -c' -ex bt -ex cont -ex quit  od
Run Code Online (Sandbox Code Playgroud)

因此,特别是对于您的问题,您可以使用:

gdb -ex 'run arg1 arg2' -ex bt -ex quit ./program
Run Code Online (Sandbox Code Playgroud)

  • 只需将 `-ex quit` 替换为 `-batch` 即可避免任何交互。 (4认同)
  • 如果您使用 `-batch` 选项,则不需要 `-ex quit`。 (3认同)
  • 为什么是`echo abc`,什么是`break main`,什么是`-c`,什么是`od`,哪个是测试的可执行文件? (2认同)

thr*_*rig 6

可以在标准输入上输入命令:

#!/bin/sh
exec gdb -q <<EOF
file ./program
run arg1 arg2
bt
quit
EOF
Run Code Online (Sandbox Code Playgroud)

或者可以将命令放入afilegdb运行gdb -batch -x afile,或者如果您讨厌带有精美外壳的换行符(和维护编码器),您可以在一行中完成所有操作(表达heredoc版本的不同方式):

gdb -q <<< "file ./program"$'\n'run$'\n'...
Run Code Online (Sandbox Code Playgroud)