2009-04-08 5 views
6

ブレークポイントを押して関数にステップインするとき、gdbバージョン6.8は、関数の名前に続けて関数の引数を表示します。「ステップインする」ときにGDBに関数のパラメータ値を出力させないようにする方法は?

私はデバッグしているプログラムで、パラメータ値の1つが参照渡しのHUGEレコードです。 gdbは、変数名の後にすべてのメンバー変数を続けて表示します。文字通り、gdb分に含まれるすべてのメンバー変数を印刷するには1分か2分かかります...これはデバッグ時に本当に面倒です。

私はこの動作を無効にする設定があると確信しています。その設定は何ですか?

答えて

10

は最終的に、それを見つけました。完全に出力を無効にする:

set print frame-arguments all 
:裏面に印刷を有効にする

set print frame-arguments scalars 

set print frame-arguments none 

のみスカラー値を出力し、配列&構造体を無視します

1

私はいつもこれをやってきた方法がありますが、あなたの質問を見れば、より良い仕組みがあるのか​​どうか不思議です。私は何も見つけられませんでした。

踏み込んでいる関数の中にいつでもブレークポイントを設定することができますが、ステップを実行する前に 'commands'コマンドを使ってヒット時に何も印刷したくないことをgdbに伝えますそのブレークポイント。私はプログラムを実行すると、10行目(fooへの呼び出し)のブレークポイントで停止し、現在のコンテキストを表示することに気付くでしょう。 'commands 2'コマンドを発行し、そのブレークポイントでgdbを静かにするように指示した後、私がヒットしたときは何も表示されません。私はバックトレース(bt)をして、私がいたいと思っていたことを示しました。

希望はこのことができます:

> cat tmp.cpp 

#include <stdio.h> 

void foo(int a) 
{ 
     printf ("%d\n", a); 
} 

int main() 
{ 
     foo(0); 

     return 0; 
} 

> g++ -g tmp.cpp 
> gdb a.out 
GNU gdb Fedora (6.8-27.el5) 
Copyright (C) 2008 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "i386-redhat-linux-gnu"... 
(gdb) break 10 
Breakpoint 1 at 0x8048491: file tmp.cpp, line 10. 
(gdb) break 5 
Breakpoint 2 at 0x804846a: file tmp.cpp, line 5. 
(gdb) run 
Starting program: /home/ronb/software/a.out 

Breakpoint 1, main() at tmp.cpp:10 
10    foo(0); 
(gdb) commands 2 
Type commands for when breakpoint 2 is hit, one per line. 
End with a line saying just "end". 
>silent 
>end 
(gdb) c 
Continuing. 
(gdb) bt 
#0 foo (a=0) at tmp.cpp:5 
#1 0x0804849d in main() at tmp.cpp:10 
(gdb) 
関連する問題