2011-07-19 23 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

編輯:由於某種原因,我沒有考慮到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會再輸出符號的地址'info var' ,並且可以打印出來* 0xaddr

當調試符號可用時,我會提供一個打印變量地址在'info var'中的補丁。

如果您想出一個最小的測試用例來重現這一點,請考慮將其發送到gdb列表,或將它附加到錯誤報告。

謝謝!

+0

這是這個問題。一個最簡單的測試用例就是在共享庫中聲明一個隱藏變量,並在與這樣的庫鏈接的可執行二進制文件中聲明具有相同名稱的靜態變量。 –

相關問題