使用getopt和gdb

时间:2012-03-16 11:15:49

标签: c emacs gdb getopt

刚刚将getopt合并到我的main()功能

getopt为每次调用设置全局变量optarg

main()来电gdb getopt()之后

optarg NULL (gdb) p optarg printf("%s\n", optarg) {{1}} {{1}}按预期输出cmd行arg

最近怎么回事?为什么这两个不一样?

这是gdb的问题,以及它如何检查全局或其他事情正在进行?

1 个答案:

答案 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);