2012-03-16 23 views
5

vừa đưa getopt vào main() func tôisử dụng getopt với gdb

getopt đặt biến toàn cầu optarg cho mỗi cuộc gọi

bước qua main() với gdb, sau getopt() gọi optarg luôn là NULL (ví dụ (gdb) p optarg) chưa printf("%s\n", optarg) xuất ra dòng cmd arg như mong đợi

điều gì đang xảy ra? tại sao hai người không giống nhau?

Đây có phải là một isue với gdb và cách nó xử lý để kiểm tra hình cầu hay là cái gì khác đang diễn ra?

Trả lời

2

lẽ liên quan: Bug 13800 - gdb does not print right values of getopt-related values

Cũng cần chú ý ví dụ:

(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 

đâu:

(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); 
Các vấn đề liên quan