gdb调试 - gdb运行程序
如何在bash脚本中使用gdb使用命令行参数运行程序? (4)
在gdb上运行程序时,通常在run
命令中给出程序的参数。 有没有办法使用gdb来运行程序,并且在shell脚本中提供参数?
我在相关问题中看到了一个答案,提到我们可以在脚本开始执行后将gdb附加到程序中。 但之后我将不得不“等待”节目。
我很好奇是否有其他方法可以做到这一点。
gdb有--init-command <somefile>
其中somefile有一个gdb命令的列表,我用它在我的代码中有//GDB
注释,然后`
echo "file ./a.out" > run
grep -nrIH "//GDB"|
sed "s/\(^[^:]\+:[^:]\+\):.*$/\1/g" |
awk '{print "b" " " $1}'|
grep -v $(echo $0|sed "s/.*\///g") >> run
gdb --init-command ./run -ex=r
作为一个脚本,它使命令加载调试符号,然后生成一个break命令列表,为每个//GDB
注释设置一个中断点,并启动它运行
你可以用--args参数运行gdb,
gdb --args executablename arg1 arg2 arg3
如果你想让它自动运行,将一些命令放在一个文件中(例如'run'),并将其作为参数:-x / tmp / cmds。 您也可以选择以批模式运行。
gdb -batch -x /tmp/cmds --args executablename arg1 arg2 arg3
另一种做法是,我个人发现稍微更方便和直观(不必记住--args参数),就是正常编译,并直接从gdb中使用r arg1 arg2 arg3
,如下所示:
gcc -g *.c *.h
gdb ./a.out
(gdb) r arg1 arh2 arg3
除了Hugo Ideler的答案之外。 当使用带有自身前缀的参数--
或-
,我不确定是否与gdb相冲突。
看来gdb将所有的args
选项作为程序的参数。
起初我想确定的是,我在引擎周围运行了gdb,它在启动时被删除。
这也适用,但可选:
gdb --args executablename "--arg1" "--arg2" "--arg3"
这不起作用:
gdb --args executablename "--arg1" "--arg2" "--arg3" -tui
在这种情况下, -tui
被用作我的程序参数而不是gdb。