2012-03-16 16 views
5

appena incorporati getopt nel mio main() funcusando getopt con gdb

getopt imposta la variabile globale optarg per ogni chiamata

passando attraverso main() con gdb, dopo getopt() chiamata optarg è sempre NULL (es (gdb) p optarg) ancora printf("%s\n", optarg) restituisce la riga cmd come previsto

cosa sta succedendo? perché i due non sono la stessa cosa?

Si tratta di un problema con gdb e di come viene esaminato globalmente o qualcos'altro?

risposta

2

probabilmente correlate: Bug 13800 - gdb does not print right values of getopt-related values

noti inoltre cioè:

(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 

Dove:

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