我在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)?
答案 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。