我正在尝试调试一个程序,它接受命令行的几个参数。 在主要内部我打印出如下参数:
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命令行参数?
答案 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