刚刚将getopt
合并到我的main()
功能
getopt
为每次调用设置全局变量optarg
main()
来电gdb
getopt()
之后 optarg
NULL
(gdb) p optarg
printf("%s\n", optarg)
{{1}} {{1}}按预期输出cmd行arg
最近怎么回事?为什么这两个不一样?
这是gdb的问题,以及它如何检查全局或其他事情正在进行?
答案 0 :(得分:2)
可能相关:Bug 13800 - gdb does not print right values of getopt-related values
另请注意:
(gdb) n
opt: 111, arg,
0x804a040
0x804a034
0x804a020
0x804a030
(gdb) printf "%p\n%p\n%p\n%p\n", &optarg, &opterr, &optind, &optopt
0x2ae760
0x2ab0f4
0x2ab0f8
0x2ab0f0
其中:
(gdb) l
6 int main(int argc, char *argv[])
7 {
8 int c;
9 while ((c = getopt(argc, argv, ":abf:o:")) != -1) {
10 printf("opt: %d, %s, \n"
11 "%p\n%p\n%p\n%p\n",
12 c, optarg,
13 &optarg, &opterr, &optind, &optopt);