您的位置:首页 > 编程语言 > C语言/C++

STL Support Tools

2015-07-01 16:05 393 查看
When you try to use GDB's "print" command to display the contents of a vector, a stack, or any other GDB abstract data structure, you will get useless results. Instead, download and install one of following tools to properly view the contents
of STL containers from within GDB.

GDB 7.0 will include support for writing pretty-printers in Python. This feature, combined with the pretty-printers in the libstdc++ svn repository, yields the best
way to visualize C++ containers. Some distros (Fedora 11+) ship all this code in a way that requires no configuration; in other cases,

this email message explains how to set everything up. The main points have been redacted here:

Check-out the latest Python libstdc++ printers to a place on your machine. In a local directory, do:

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

Add the following to your ~/.gdbinit. The path needs to match where the python module above was checked-out. So if checked out to: /home/maude/gdb_printers/, the path would be as written in the example:

python
import sys
sys.path.insert(0, '/home/maude/gdb_printers/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end


The path should be the only element that needs to be adjusted in the example above. Once loaded, STL classes that the printers support should printed in a more human-readable format. To print the classes in the old style, use the
/r (raw) switch in the print command (i.e., print /r foo). This will print the classes as if the Python pretty-printers were not loaded.

gdb-stl-views is a set of GDB macros that can display the contents of many STL containers: list, vector, map, multimap, set, multiset, dequeue, stack, queue, priority_queue, bitset, string, and widestring. Writen and currently
maintained by Dan Marinescu - PhD. The author formally disclaims copyright to this source code. In place of a legal notice, here is a blessing: May you do good and not evil. May you find forgiveness for yourself and forgive others. May you share freely, never
taking more than you give!

You can download it
here or
here

Tutorials and an alternative download are
hosted at yolinux.com.

gdb++ is a Perl script which extends gdb. It comes bundled as part of the Devel::GDB::Reflect Perl module. First

use CPAN to install the module, then follow the
gdb++ usage instructions. Developed by Stanford PhD student Antal Novak.

There are other options. Tom Malnar wrote a set of GDB macros similar to Dan's (
http://thread.gmane.org/gmane.comp.gcc.g++.general/4060/focus=4167 ) but it doesn't cover as wide a variety of containers. Gilad Mishne wrote a different set of macros (
http://www.stanford.edu/~afn/gdb_stl_utils/ ) but it is long unmaintained and it works only with SGI's STL implementation, which very few GCC users use.

Iterators: how to display the item the iterator points at (tested on gdb 6 with a list):
print *(iter._M_current)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 调试 gdb