如何在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
注释设置一个中断点,并开始运行