2010-03-22 98 views
13

我一直在使用宏解決方案,因爲它概述了here。但是,如何在不使用宏的情況下查看它們有一個提及。我指的是GDB版本7及以上。如何查看STL容器的內容使用GDB 7.x

有人會說明如何?

感謝

+0

gdb的數字版本是你在談論 – 2010-03-22 12:12:05

+0

7及以上版本。謝謝。 – vehomzzz 2010-03-22 12:17:38

+0

[如何漂亮地打印GDB中的STL容器?](https://stackoverflow.com/questions/11606048/how-to-pretty-print-stl-containers-in-gdb) – 2017-09-24 10:25:55

回答

21

從SVN

svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python 

獲取蟒蛇觀衆以下內容添加到您的~/.gdbinit

python 
import sys 
sys.path.insert(0, '/path/to/pretty-printers/dir') 
from libstdcxx.v6.printers import register_libstdcxx_printers 
register_libstdcxx_printers (None) 
end 

然後打印應該只是工作:

std::map<int, std::string> the_map; 
the_map[23] = "hello"; 
the_map[1024] = "world"; 

在GDB:

(gdb) print the_map 
$1 = std::map with 2 elements = { [23] = "hello", [1024] = "world" } 

要回到舊視圖使用print /r/r爲原料)。

參見:或http://sourceware.org/gdb/wiki/STLSupport

+0

可能的重複以及如何實際在GDB中使用它來打印內容?有什麼需要設置。 thx – vehomzzz 2010-03-23 12:18:47

+0

一旦加載代碼在.gdbinit中,那麼打印應該只是工作,回到舊的視圖,你做一個打印/ r(/ r是原始的) (格式顯然很糟糕,我的道歉) std :: map the_map; the_map [23] =「hello」; the_map [1024] =「world」; (GDB)打印the_map $ 1 =標準::地圖2元= { [23] = 「你好」, [1024] = 「世界」 } – McBeth 2010-03-23 13:01:31

+1

考慮修改您的答案,包括您的評論此信息。這種格式不會太糟糕。 – camh 2010-04-21 13:18:14

2

的libstdcxx_printers包括最近版本的GCC,所以如果你使用GCC 4.5以後,那麼你不需要做任何事情,漂亮的打印工作的很好。

(gdb) p v 
$1 = std::vector of length 3, capacity 3 = {std::set with 3 elements = { 
    [0] = 1, [1] = 2, [2] = 3}, std::set with 2 elements = {[0] = 12, 
    [1] = 13}, std::set with 1 elements = {[0] = 23}} 
(gdb) p v[1] 
$2 = std::set with 2 elements = {[0] = 12, [1] = 13} 

要禁用漂亮的印刷使用p/rprint/r獲得「原始」輸出。

+0

如何使用GCC編譯C++程序來查看STL容器?謝謝! – piyukr 2016-09-22 14:41:35

+1

@piyukr答案的哪一部分不清楚?你不必做任何特別的事情。如果你問的東西不同,那就問一個新問題,不要添加評論。 – 2016-09-22 16:11:44

+0

我一直在使用g ++ -g test.cpp然後使用gdb a.out,但是我得到了這個輸出。[截圖](http://imgur.com/a/KVbCa) – piyukr 2016-09-23 15:48:01