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

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

我愿意:

gdb -tui InsertionSortWithErrors

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

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

【问题讨论】:

    标签: c linux debugging gdb command-line-arguments


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-11
      • 2013-11-27
      • 2018-11-10
      • 2017-04-08
      • 2015-06-05
      • 1970-01-01
      • 2015-05-15
      相关资源
      最近更新 更多