2010-03-22 104 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