2012-03-16 10 views
5

acaban de incorporarse getopt en mi main() funcusando getopt con gdb

getopt establece la variable global optarg para cada llamada

paso a paso por main() con gdb, después getopt() llamada optarg es siempre NULL (por ejemplo (gdb) p optarg) todavía printf("%s\n", optarg) salidas de la línea de cmd arg como se esperaba

¿Qué está pasando? ¿Por qué los dos no son lo mismo?

¿Es esto una isue con gdb y cómo trata de inspeccionar los globales o está sucediendo algo más?

Respuesta

2

probablemente relacionadas: Bug 13800 - gdb does not print right values of getopt-related values

Observe también decir:

(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 

Dónde:

(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);