【问题标题】:gdb takes only the first parametergdb 只接受第一个参数
【发布时间】:2012-07-24 12:12:35
【问题描述】:

我正在尝试调试一个在命令行上接受几个参数的程序。 在 main 中,我打印出如下参数:

int main (int argc, char **argv)
{
 for (int i = 0; i < argc; i++) {
  printf("param%d=%s\n", i, argv[i]);
}

当我在没有 gdb 的情况下运行我的程序时,像这样

"program img.jpg 1 2"

我得到输出:

param0: program
param1: img.jpg
param2: 1
param3: 2

当我像这样使用 gdb 运行它时:

"program img.jpg 1 2"

我只知道

param0: img.jpg

一方面img.jpg 应该是 param1,param2 和 3 也不见了。 有没有一种特殊的方法可以为我缺少的 gdb 指定命令行参数?

【问题讨论】:

    标签: c++ debugging gdb


    【解决方案1】:

    你应该在运行程序时指定参数。

    首先你应该调用调试器

    $ gdb <binary_file_name (executable)>
    

    比你启动程序还要传递命令行参数:

    (gdb) r p1 -p2 --p3 p4=p5
    

    旁注:我认为这种解决方案比使用--args 标志更灵活,因为您可以使用不同的参数多次启动程序而无需退出当前的gdb 实例(例如,保留断点).

    【讨论】:

    • 它有效,非常感谢。我会尽快检查它作为正确答案
    • 你也可以在gdb中使用“set args”,然后调用“run”。
    【解决方案2】:

    您现在将参数发送到gdb 而不是program。为了将参数传递给program,您可以将--args 参数用于gdb

    gdb --args program img.jpg 1 2
    

    【讨论】:

      【解决方案3】:

      您可以使用--args 选项告诉gdb 将参数传递给正在调试的程序:

      > gdb --args program img.jpg 1 2
      

      或者,您可以不带参数启动gdb,然后将它们提供给run 命令:

      > gdb program
      (gdb) run img.jpg 1 2
      

      【讨论】:

        猜你喜欢
        • 2023-03-19
        • 2017-11-16
        • 1970-01-01
        • 2021-05-05
        • 2013-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多