LUMIERA.clone/doc/technical/howto/DebugGdbPretty.txt

77 lines
2.4 KiB
Text
Raw Normal View History

GDB Python pretty printers
==========================
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'
http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/python/[svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python stlPrettyPrinter]
2014-12-01 01:31:19 +01:00
* you need to activate them explicitly through your '~/.gdbinit'
[source,python]
----
#
# .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 link:http://sourceware.org/gdb/wiki/STLSupport[see here..]
.Hello World
[source,C]
----
#include <iostream>
#include <string>
#include <vector>
using std::string;
using std::cout;
using std::endl;
2025-06-07 23:59:57 +02:00
int
main (int, char**)
{
std::string str = "hullo wöld";
std::vector<int> vec (1000);
2025-06-07 23:59:57 +02:00
for (uint i = 0; i < vec.size(); ++i)
vec[i] = i;
2025-06-07 23:59:57 +02:00
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