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

Posted

技术标签:

【中文标题】在 Linux 中启动 GDB 时如何传递命令行参数? [复制]【英文标题】:How do I pass a command line argument while starting up GDB in Linux? [duplicate] 【发布时间】:2013-01-07 19:58:09 【问题描述】:

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

我愿意:

gdb -tui InsertionSortWithErrors

这可行,但之后我不知道如何传递参数。我使用了gdb -help,它说明了--args,我也尝试过,但没有成功。

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

【问题讨论】:

【参考方案1】:

试试

gdb --args InsertionSortWithErrors arg1toinsort arg2toinsort

【讨论】:

就像在 GNU GDB 手册部分 Invoking GDB987654321@中提到的那样 如果你运行gdb -h也会提到它,而手册页中又提到了它。 @PietroSaccardi 手册页和-h 输出之间似乎存在一些差异,至少在某些 Ubuntu 版本上是这样。这可能会发生,尤其是如果命令的 man 文件没有像解析 -h 选项的源代码那样经常更新。【参考方案2】:

gdb 启动后,您可以使用“r args”运行程序。

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

$ executablefile arg1 arg2 arg3 

gdb 上调试它:

$ gdb executablefile  
(gdb) r arg1 arg2 arg3

【讨论】:

只是为了扩展这一点....我的运行通常是这样的:program --option1 --option2=argvalue 所以在 gdb 中我输入了:r --option1 --option2=argvalue 这起初对我来说并不明显。 这确实是票数最高的评论。我想补充一点,r 代表 gdb 命令 run,您可以在 gdb 中输入 help run 来查看它的一些帮助。 我不想每次启动 gdb 时都输入参数,我希望它在我的命令行历史记录中【参考方案3】:

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

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

恕我直言,这个顺序一开始有点不直观。

【讨论】:

我同意,非常不直观,所以真正的命令行应该是:$ gdb --args <executable> <argument(s)>。我错误地在 --args 之后的所有内容中添加了引号,导致 gdb 将整个内容解析为可执行文件。 我认为是因为参数紧跟在可执行文件之后,就好像你在没有 gdb 的情况下运行一样。 我认为不直观的是--args。如果拼写为--run 会非常直观【参考方案4】:

另一种选择,一旦进入 GDB shell,在运行程序之前,你可以这样做

(gdb) set args file1 file2

并检查它:

(gdb) show args

【讨论】:

以上是关于在 Linux 中启动 GDB 时如何传递命令行参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Eclipse 中启动 gdb 调试之前运行 linux 脚本

如何安装gdb

Linux编程基础——GDB(设置断点)

Linux系统中GDB调试详细操作方法

Linux编程基础——GDB(设置断点)

GDB调试C/C++程序命令整理