Since some time, GDB supports Python written extension modules, especially for pretty printing of data structures. A selection of pre-defined pretty printers for STL containers is part of the standard distribution. The graphical debugger frontend provided by the Eclipse CDT automatically uses this debugger provided presentation to show the value of variables in the detail pane of the variables view. The most recent version of CDT (Version 8 for Eclipe 3.7 »Indigo«) is even able to populate the structure view based on the python pretty printer’s output, which is a big step ahead towards easy debugging of more elaborate data structures based on STL containers.
Installation notes
This feature requires an python enabled GDB (>6.8.50). Actually, even the most recent stable GDB (Version 7.2) is recommended, because it contains some relevant bugfixes. Debian users might want to backport the the GDB package from Debian/Wheezy (GDB-7.2). Moreover, you need to check out and install a recent version of the python pretty-printers from the GNU Subversion repository:
-
svn checkout svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python stlPrettyPrinter
-
you need to activate them explicitly through your ~/.gdbinit
# # .gdbinit : GDB Config file # # 3/2010 - Ichthyo: add python pretty printers for STL python import sys sys.path.insert(0, '/opt/gdb/stlPrettyPrinter') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end
For more informations see here..
#include <iostream> #include <string> #include <vector> using std::string; using std::cout; using std::endl; int main (int, char**) { std::string str = "hullo wöld"; std::vector<int> vec (1000); for (uint i = 0; i < vec.size(); ++i) vec[i] = i; cout << str << "\n.gulp.\n"; return 0; }
When selecting the string or the vector in the Eclipse variables view (or when issuing "print str" at the GDB prompt), the GDB python pretty-printer should be activated.
to get the full support in Eclipse Indigo + CDT-8, you need to activate the setting “enable pretty printers in variable/expression tree”, which can be accessed as Window/Preferences > C++ / debug / GDB |