2010-04-21 777 views
12

我有一個std :: map < std :: string,std :: string> cont;如何在gdb中打印std :: map值

我想在gdb中看到cont [「some_key」]。當我試圖

p續[「some_ket」]

我得到這個消息:其中有一個還試圖通過對operator []無法轉換到函數需要什麼參數。

我使用的是GNU gdb Red Hat Linux(6.3.0.0-1.162.el4rh)。謝謝

+3

可惜。 gdb7.0可以直接打印:http://sourceware.org/gdb/wiki/STLSupport – 2010-04-21 16:36:59

+0

這是正確的答案。該功能已經存在,您只是使用尚未集成的舊版發行版。考慮使用最近的Fedora,或者從源代碼構建工具(它可能只是gdb,儘管它可能還需要g ++和binutils)。 – 2012-07-21 16:48:00

回答

6

最新的gdb有python支持,所以可以很容易地編寫一個函數來打印出任何stl結構的內容。但是,您必須學習API並編寫腳本。幸運的是,gcc 4.5將提供所需的python腳本來讓gdb智能地處理stl數據結構。

編輯:你不必等待GCC 4.5(順便說一句,已經發布),你可以只是grab the code from SVN

1

Gdb不理解C++運算符重載。

+0

據我所知在調試過程中沒有任何方法可以看到鍵值? – 2010-04-21 13:02:54

+0

不容易。 std :: map是一個複雜的數據結構。你可以關注(特定於實現的)私人成員,看看發生了什麼,但這非常麻煩。 @艾迪的回答可能有幫助,但我還沒有玩過那些東西。 – 2010-04-21 13:17:25

6

您可以編寫自己的轉儲功能,並呼籲他們:

(gdb) call dump(m) 

看到這個線程: http://www.mail-archive.com/[email protected]/msg02109.html

我很好奇的GDB輔助宏。

+1

該[該線程的下一條消息](http://www.mail-archive.com/[email protected]/msg02189.html)顯示了一個GDB宏,效果很好。隨後的消息包含一些小的改進。 – mMontu 2015-06-09 16:37:03