在Linux中启动GDB时如何传递命令行参数?

150

作为我的任务的一部分,我需要调试一个有错误的程序。然而,我必须首先传递命令行参数才能解决这个问题。

我执行:

gdb -tui InsertionSortWithErrors

这个方法是有效的,但之后我不知道如何传递参数。我使用了 gdb -help 命令,并看到了关于 --args 的说明,我也尝试过但没有成功。

我想要做到同时使用调试器和 GUI 并传递命令行参数。

4个回答

250

一旦gdb启动,您可以使用"r args"来运行程序。

因此,如果您正在运行您的代码:

$ executablefile arg1 arg2 arg3 

通过 gdb 进行调试:

$ gdb executablefile  
(gdb) r arg1 arg2 arg3

11
只是为了详细说明一下...我通常会这样运行我的程序:program --option1 --option2=argvalue,所以在gdb中我输入了:r --option1 --option2=argvalue。一开始我没有意识到这点。 - harperville
4
这个评论受到了最高的赞同。我想补充一下,r代表gdb命令run,当你在gdb中键入help run时,你可以看到一些帮助信息。 - Carl Smotricz
6
我不想每次启动GDB时都要输入参数,我希望它出现在我的命令行历史记录中。 - Michael

124

尝试

gdb --args InsertionSortWithErrors arg1toinsort arg2toinsort

2
就像GNU GDB手册中的调用GDB一节所述。 - RubenLaguna
1
还提到了如果运行gdb -h,这在手册页中也有提到。 - Pietro Saccardi
2
@PietroSaccardi,某些Ubuntu版本的man页面和“-h”输出之间似乎存在一些差异。这种情况可能会发生,特别是当命令的man文件没有像解析“-h”选项的源代码那样经常更新时。 - tresf

31

在 GDB shell 内部,在运行程序之前,您可以进行另一种选择:

输入以下命令:

(gdb) set args file1 file2

使用以下方式进行检查:

(gdb) show args

这是正确的答案! - 71GA

31

我正在使用GDB7.1.1版本,如--help所示:

gdb [options] --args executable-file [inferior-arguments ...]

我认为,刚开始的时候这个顺序有点不直观。


2
我同意,这非常不直观,因此真正的命令行应该是:$ gdb --args <可执行文件> <参数>。我错误地在 --args 后面的所有内容周围添加了引号,导致 gdb 将整个内容解析为可执行文件。 - zpon
我认为这样做是让参数紧跟可执行文件,就像没有使用gdb一样运行。 - qwr
3
我认为不直观的是 --args。如果它被拼写为 --run,那就会很直观。 - Basile Starynkevitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接