how to view contents of STL containers using GDB 7.x
I have been using the macro solution, as it is outlined here. However, there is a mention on how to view them without macros. I am referring to GDB version 7 and above.
Would som开发者_StackOverflow中文版eone illustrate how?
Thanks
Get the python viewers from SVN
svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
Add the following to your ~/.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
Then print should just work:
std::map<int, std::string> the_map;
the_map[23] = "hello";
the_map[1024] = "world";
In gdb:
(gdb) print the_map
$1 = std::map with 2 elements = { [23] = "hello", [1024] = "world" }
To get back to the old view use print /r
(/r
is for raw).
See also: http://sourceware.org/gdb/wiki/STLSupport
The libstdcxx_printers are included with recent versions of GCC, so if you're using GCC 4.5 or later then you don't need to do anything, pretty printing Just Works.
(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}
To disable the pretty printing use p/r
or print/r
to get "raw" output.
精彩评论