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

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

还有别的办法吗?


当前回答

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

run arg1 arg2 arg3 etc

program input

并调用gdb like

gdb prog < file

其他回答

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

run arg1 arg2 arg3 etc

program input

并调用gdb like

gdb prog < file

如果——args参数在您的机器上不起作用(即在Solaris 8上),您可以像这样启动gdb

gdb -ex "set args <arg 1> <arg 2> ... <arg n>"

你可以将此与输入文件到stdin和“立即运行”结合起来:

gdb -ex "set args <arg 1> <arg 2> ... <arg n> < <input file>" -ex "r"

你可以使用——args参数运行gdb:

gdb --args executablename arg1 arg2 arg3

如果您经常这样做(例如,当从脚本运行GDB时),您可能需要考虑以下参数以进一步实现自动化。首先,您可以将GDB命令(例如'run')放在一个文本文件中,并将文件名提供给-x参数。其次,通过提供——batch参数,可以让GDB在运行命令后退出。完整的例子:

gdb -x commands.txt --batch --args executablename arg1 arg2 arg3

除了雨果·爱德勒的答案。 当使用自身前缀为——或-的参数时,我不确定是否与gdb one冲突。

似乎gdb将所有args选项后的参数作为程序的参数。

起初我想要确定,我运行gdb与你的args周围的引号,它在启动时被删除。

这也可以,但可选:

gdb --args executablename "--arg1" "--arg2" "--arg3"

这行不通:

gdb --args executablename "--arg1" "--arg2" "--arg3" -tui

在这种情况下,-tui被用作我的程序参数,而不是作为gdbone。

gdb -ex=r --args myprogram arg1 arg2

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