9

複数の変数を 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 行の入力でこれを行うためのより良い方法が必要であることを知っています。

4

2 に答える 2

10

display iGDB を再起動するたびに、 などをそれぞれ再入力せずに複数のアクティブな「変数表示」を確立するdisplay s[i]には、GDB の「既定のコマンド シーケンス」を使用します。

たとえば、これを に追加します~/.gdbinit

define disp_vars
  disp i
  disp sign
  disp val
  disp exp
  disp s[i]
end

disp_varsこれで、GDB プロンプトで入力して、一度にすべてのディスプレイを追加できます。

于 2009-01-25T08:37:21.070 に答える
4

雇用されたロシア人は正しい解決策を提供しましたが、例で使用されていることを確認したい場合は、以下を参照してください. .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」コマンドを再度入力する必要があることに注意してください。雇用されたロシア人に感謝します。

于 2009-01-26T16:20:11.360 に答える