5

getopt私の機能に組み込まれたばかりmain()です

getoptoptarg各呼び出しのグローバル変数を設定します

を使用してステップスルーmain()するとgdbgetopt()呼び出しoptargは常にNULL(例: (gdb) p optarg) でありprintf("%s\n", optarg)、期待どおりに cmd 行の引数が出力されます

どうしたの?なぜ2つは同じではないのですか?

これは gdb の問題であり、gdb がどのようにグローバルを検査しようとしているのか、それとも何か他のことが起こっているのでしょうか?

4

1 に答える 1

2

おそらく関連:バグ 13800 - gdb が getopt 関連の値の正しい値を出力しない

次の点にも注意してください。

(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);
于 2012-03-16T12:58:29.550 に答える