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

Sha*_*ars 111 c linux debugging gdb command-line-arguments

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

我做:

gdb -tui InsertionSortWithErrors
Run Code Online (Sandbox Code Playgroud)

哪个有效,但之后我不知道如何传递参数.我用过gdb -help,它说了一些关于--args我也尝试过的东西,它没有用.

我希望能够获得调试器+ gui并传递命令行参数.

lda*_*v1s 189

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

因此,如果您通过以下方式运行代码:

$ executablefile arg1 arg2 arg3 
Run Code Online (Sandbox Code Playgroud)

gdb通过以下方式调试:

$ gdb executablefile  
(gdb) r arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)

  • 只是为了扩展这个....我正在运行我的通常喜欢:`program --option1 --option2 = argvalue`所以在gdb我键入:`r --option1 --option2 = argvalue`这对我来说并不明显首先. (7认同)
  • 这正确地是最高投票的评论。我只想补充一点,`r` 代表 gdb 命令 `run`,你可以通过在 gdb 中输入 `help run` 来查看它的一些帮助。 (4认同)
  • 我不想每次启动 gdb 时都输入参数,我希望它在我的命令行历史记录中 (4认同)

Bas*_*tch 90

尝试

gdb --args InsertionSortWithErrors arg1toinsort arg2toinsort
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.这不在Ubuntu 15.04中gdb的手册页中! (3认同)
  • 就像 GNU GDB 手册部分提到的 [调用 GDB](https://sourceware.org/gdb/current/onlinedocs/gdb/Invoking-GDB.html#Invoking-GDB) (2认同)
  • @PietroSaccardi 手册页和“-h”输出之间似乎存在一些差异,至少在某些 Ubuntu 版本上是这样。这种情况可能会发生,特别是如果命令的 man 文件没有像解析“-h”选项的源代码那样频繁更新。 (2认同)

Fer*_*hez 21

另一个选项,一旦进入gdb shell,在运行程序之前,你就可以做到

(gdb) set args file1 file2
Run Code Online (Sandbox Code Playgroud)

并检查它

(gdb) show args
Run Code Online (Sandbox Code Playgroud)


Ale*_*lex 20

我正在使用gdb 7.1.1,如下--help所示:

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

恕我直言,这个订单起初有点不直观.

  • 我认为不显眼的是`--args`.如果拼写为`--run`,那将非常直观 (3认同)
  • 我同意,非常不直观,所以真正的命令行会读到:`$ gdb --args <executable> <argument(s)>`.我错误地在`--args`之后添加引号,导致gdb将整个事件解析为可执行文件. (2认同)