gdb错误计算包含'#'的args

时间:2016-03-16 23:07:52

标签: c gdb arguments

我在gdb中使用参数-b # +L -m运行我的程序,但是当我break main时,argc报告为2,最后一个参数可用"-b"。但是,在GDB中使用show args会给我Argument list to give program being debugged when it is started is "-b # +L -m",这是准确的。

Starting program: /home/matt/ ... /args -b # +L -m

Breakpoint 1, main (argc=2, argv=0x7fffffffe028) at args.c:129

在参数中是否特别处理#,即使在GDB中(不是bash)?

1 个答案:

答案 0 :(得分:1)

我假设你在Linux上运行。默认情况下,Linux上的gdb将调用shell来启动程序。因此,#之后的所有内容仍被shell解释为注释。您可以通过告诉它不要使用shell通过set startup-with-shell off命令启动程序来更改gdb中的行为。

这是一个只打印argc的示例程序。

#include <stdio.h>
int main(int argc, char **argv)
{
    printf("%d\n", argc);
    return 0;
}

以下是gdb在接收和不接受shell的情况下运行。

(gdb) r -b # +L -m
Starting program: /tmp/a.out -b # +L -m
2
[Inferior 1 (process 28385) exited normally]
(gdb) set startup-with-shell off
(gdb) r -b # +L -m
Starting program: /tmp/a.out -b # +L -m
5
[Inferior 1 (process 28443) exited normally]
(gdb) 

有关程序启动的更多详细信息,请参阅gdb manual