在GDB上运行程序时,通常在run命令中给出程序的参数。是否有一种方法可以使用GDB运行程序,并在shell脚本中给出参数?

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

还有别的办法吗?


当前回答

gdb -ex=r --args myprogram arg1 arg2

-ex=r是-ex=run的缩写,它告诉GDB立即运行您的程序,而不是等待您在提示符下键入“run”。然后——args表示后面的所有内容都是命令和参数,就像您通常在命令行提示符中键入它们一样。

其他回答

gdb -ex=r --args myprogram arg1 arg2

-ex=r是-ex=run的缩写,它告诉GDB立即运行您的程序,而不是等待您在提示符下键入“run”。然后——args表示后面的所有内容都是命令和参数,就像您通常在命令行提示符中键入它们一样。

你可以创建一个带有context的文件:

run arg1 arg2 arg3 etc

program input

并调用gdb like

gdb prog < file

太迟了,但是这里有一个在gdb会话期间工作的方法。

gdb <执行>

then

(gdb)恰当的论点

这将返回大量匹配,有用的是set args。

set args -- Set argument list to give program being debugged when it is started.

arg1 arg2 ..

then

r

这将运行程序,将参数和参数计数传递给main(argc, argv)。

如果你想从文件中传递参数, 例如,scanf从文件作为输入

试试这个

(gdb) run < the_file_contains_data

gdb有——init-command <somefile> where 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

作为脚本,该脚本放置加载调试符号的命令,然后生成一个中断命令列表,为每个//GDB注释放置断点,并开始运行