通常,在gdb上运行程序时,程序的参数在 run 命令中给出 . 有没有办法使用gdb运行程序,并在shell脚本中提供参数?
run
我在相关问题中看到了一个答案,提到我们可以在脚本开始执行后将gdb附加到程序中 . 但接下来我将不得不“等待”该计划 .
我很好奇是否还有其他方法可以做到这一点 .
你可以使用--args参数运行gdb,
gdb --args executablename arg1 arg2 arg3
如果您希望它自动运行,请将一些命令放在一个文件中(例如'run')并将其作为参数:-x / tmp / cmds . 您可以选择使用-batch模式运行 .
gdb -batch -x /tmp/cmds --args executablename arg1 arg2 arg3
gdb有 --init-command <somefile> ,其中somefile有一个要运行的gdb命令列表,我用它在我的代码中有 //GDB 注释,然后`
--init-command <somefile>
//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 注释设置一个断点,并启动它运行
您可以使用上下文创建一个文件:
run arg1 arg2 arg3 etc program input
并调用gdb之类的
gdb prog < file
gdb -ex=r --args myprogram arg1 arg2
-ex=r 是 -ex=run 的缩写,告诉gdb立即运行您的程序,而不是等待您在提示符下键入"run" . 然后 --args 表示随后的所有内容都是命令和参数,就像您通常在命令行提示符下键入它们一样 .
-ex=r
-ex=run
--args
Hugo Ideler答案的补充 . 当使用具有自己前缀的参数如 -- 或 - 时,我不确定与gdb冲突 .
--
-
似乎gdb将 args 选项后的所有选项作为程序的参数 .
args
起初我想确定,我在你的args周围用引号运行gdb,它在发布时被删除 .
这也有效,但可选:
gdb --args executablename "--arg1" "--arg2" "--arg3"
这不起作用:
gdb --args executablename "--arg1" "--arg2" "--arg3" -tui
在这种情况下, -tui 用作我的程序参数而不是gdb .
-tui
另一种方法,我个人觉得稍微更方便和直观(不必记住 --args 参数),是正常编译,并直接在 gdb 内使用 r arg1 arg2 arg3 ,如下所示:
gdb
r arg1 arg2 arg3
$ gcc -g *.c *.h $ gdb ./a.out (gdb) r arg1 arg2 arg3
6 回答
你可以使用--args参数运行gdb,
如果您希望它自动运行,请将一些命令放在一个文件中(例如'run')并将其作为参数:-x / tmp / cmds . 您可以选择使用-batch模式运行 .
gdb有
--init-command <somefile>
,其中somefile有一个要运行的gdb命令列表,我用它在我的代码中有//GDB
注释,然后`作为脚本,它将命令加载调试符号,然后生成一个break命令列表,为每个
//GDB
注释设置一个断点,并启动它运行您可以使用上下文创建一个文件:
并调用gdb之类的
-ex=r
是-ex=run
的缩写,告诉gdb立即运行您的程序,而不是等待您在提示符下键入"run" . 然后--args
表示随后的所有内容都是命令和参数,就像您通常在命令行提示符下键入它们一样 .Hugo Ideler答案的补充 . 当使用具有自己前缀的参数如
--
或-
时,我不确定与gdb冲突 .似乎gdb将
args
选项后的所有选项作为程序的参数 .起初我想确定,我在你的args周围用引号运行gdb,它在发布时被删除 .
这也有效,但可选:
这不起作用:
在这种情况下,
-tui
用作我的程序参数而不是gdb .另一种方法,我个人觉得稍微更方便和直观(不必记住
--args
参数),是正常编译,并直接在gdb
内使用r arg1 arg2 arg3
,如下所示: