GDB Python pretty printers

转自:http://lumiera.org/documentation/technical/howto/DebugGdbPretty.html


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..

Hello World
#include 
#include 
#include 

using std::string;
using std::cout;
using std::endl;


int
main (int, char**)
  {
    std::string str = "hullo wöld";
    std::vector 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.

Note 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

你可能感兴趣的:(GDB Python pretty printers)