如何在bash脚本中使用gdb使用命令行参数来运行程序?

在gdb上运行程序时,通常在“运行”命令中给出程序的参数。 有没有办法使用gdb来运行程序,以及在shell脚本中提供参数?

我在相关的问题中看到了一个答案,提到我们可以在脚本开始执行后将gdb附加到程序中。 但是,我将不得不“等待”这个程序。

我很好奇是否有其他方式来做到这一点。

你可以用–args参数运行gdb,

gdb --args executablename arg1 arg2 arg3 

如果你想让它自动运行,把一些命令放在一个文件中(例如“run”),并把它作为参数:-x / tmp / cmds。 您也可以select以批模式运行。

 gdb -batch -x /tmp/cmds --args executablename arg1 arg2 arg3 

HTH

 gdb -ex=r --args myprogram arg1 arg2 

-ex=r-ex=run简称, -ex=run告诉gdb立即运行你的程序,而不是等你提示时input“run”。 然后--args说,接下来的一切都是命令和参数,就像你通常在命令行提示符下键入一样。

另一种做法是,我个人发现稍微更方便和直观(不必记住–args参数),就是正常编译,直接从gdb中使用r arg1 arg2 arg3 ,如下所示:

 gcc -g *.c *.h gdb ./a.out (gdb) r arg1 arh2 arg3 

你可以用上下文创build一个文件:

运行arg1 arg2 arg3等

程序input

并调用gdb

  gdb prog < file 

gdb有--init-command <somefile>其中somefile有一个gdb命令的列表来运行,我用这个//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 

作为一个脚本,它将命令加载debugging符号,然后生成一个break命令列表,为每个//GDB注释设置一个中断点,并开始运行