2011-07-19 14 views
4

名前に複数のシンボルを持つグローバル変数があり、そのすべてを出力したいと思います。例:GDBで重複するシンボルを解決するにはどうすればいいですか

(gdb) info var g_reallocCount 
All variables matching regular expression "g_reallocCount": 

File sv.c: 
long int g_reallocCount; 
long int g_reallocCount; 
long int g_reallocCount; 
long int g_reallocCount; 

私は「印刷g_reallocCount」を使用しようとすると、私は1つの結果だけを取得し、それは私が必要とするものではありません。

私は複数のシンボルがある理由は、私が変更しようとしているスタティックライブラリが、複数の読み込まれたモジュールにリンクしているということです。現時点で私はその事実を変えることができるかどうかはわかりません。

おかげ

答えて

1

編集:私はinitally ... Cリンケージを想定した簡単な方法を検討することができなかったいくつかの理由があります。

(gdb) shell nm /path/to/stuff | grep g_reallocCount | cut -d' ' -f1 >>foo 
(gdb) shell cat foo | awk '{print "p *0x" $0}' >foo.gdb 
(gdb) source foo.gdb 
$4 = 0 
$5 = 0 
$6 = 0 

オリジナルの答え、同様の前提:良いアイデアの欠如のために 、あなたは、GDBが出力シンボルのアドレスで、その後になるバイナリ/ライブラリをコピーしてstripコマンドでデバッグシンボルで、それを除去しようとすることができます'info var' あなたはprintで印刷することができます。* 0xaddr

デバッグシンボルが利用可能なときに、変数のアドレスを 'info var'に表示するパッチがあります。

これを再現するための最小限のテストケースがある場合は、gdbリストに送信するか、バグレポートに添付してください。

ありがとうございます!

+0

これは問題です。最も簡単なテストケースは、共有ライブラリの隠し変数と、そのライブラリにリンクされた実行可能バイナリに同じ名前の静的変数を宣言することです。 –

関連する問題