gdb只接受第一个参数

时间:2012-07-24 12:12:35

标签: c++ debugging gdb

我正在尝试调试一个程序,它接受命令行的几个参数。 在主要内部我打印出如下参数:

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命令行参数?

3 个答案:

答案 0 :(得分:4)

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

首先,您应该使用

调用调试器
$ gdb <binary_file_name (executable)>

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

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

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

答案 1 :(得分:1)

您现在正在向gdb而不是program发送参数。要将参数传递给program,您可以使用--args的{​​{1}}参数。

gdb

答案 2 :(得分:1)

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

> gdb --args program img.jpg 1 2

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

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