複数の変数を 1 行に表示するにはどうすればよいですか? だから私は次のような出力を得たい:
30 if(s[i] != '\0')
5: s[i] = 101 'e'
4: exp = 14
3: val = 123.45
2: sign = 1
1: i = 6
私は disp s[i] ENTER disp exp ENTER (など) と入力してきましたが、1 行の入力でこれを行うためのより良い方法が必要であることを知っています。
display i
GDB を再起動するたびに、 などをそれぞれ再入力せずに複数のアクティブな「変数表示」を確立するdisplay s[i]
には、GDB の「既定のコマンド シーケンス」を使用します。
たとえば、これを に追加します~/.gdbinit
。
define disp_vars
disp i
disp sign
disp val
disp exp
disp s[i]
end
disp_vars
これで、GDB プロンプトで入力して、一度にすべてのディスプレイを追加できます。
雇用されたロシア人は正しい解決策を提供しましたが、例で使用されていることを確認したい場合は、以下を参照してください. .gdbinit をホーム ディレクトリに配置することにコミットするかどうかわからない場合は、プログラムを実行しているディレクトリに配置して実験することもできます。
$ gcc -g atof_ex4.2.c
$ gdb ./a.out
(gdb) b 30
Breakpoint 1 at 0x1907: file atof_ex4.2.c, line 30.
(gdb) h user-defined
List of commands:
disp_vars -- User-defined
(gdb) disp_vars #this will enable the user defined canned sequence (but I haven't done run yet! So I'll this actually doesn't work yet.)
No symbol "i" in current context.
(gdb) r
Starting program: a.out
Breakpoint 1, atof (s=0xbffff028 "123.45e-6") at atof_ex4.2.c:30
30 if(s[i] != '\0')
(gdb) s # No disp_vars output yet because I have to do it AFTER 'run' command
32 if(s[i] == 'e' || s[i] == 'E')
(gdb) disp_vars # Now it will work ;)
(gdb) s
35 sign = (s[i] == '-') ? -1 : 1;
5: s[i] = 45 '-'
4: exp = 14
3: val = 123.45
2: sign = 1
1: i = 7
もちろん、「r」は実行、「s」はステップ、「b」はブレークなどです。一部の出力も省略しています。「run」の後に「disp_vars」コマンドを再度入力する必要があることに注意してください。雇用されたロシア人に感謝します。