Line 56: | Line 56: | ||
I'd want to have the python backtrace work integrated with the glib backtrace work: pygtk regularly shows me backtrace with a mixture of both | I'd want to have the python backtrace work integrated with the glib backtrace work: pygtk regularly shows me backtrace with a mixture of both | ||
Alex's work is in in glib git: | |||
http://git.gnome.org/browse/glib/commit/?id=efe9169234e226f594b4254618f35a139338c35f | |||
which does a: | |||
gdb.backtrace.push_frame_filter (GFrameFilter) | |||
See http://tromey.com/blog/?p=522 for info on this. | |||
This needs a more recent version of gdb than in F-12; I'll need to build a local copy of "archer-tromey-python" branch of gdb to work on this. | |||
== Benefit to Fedora == | == Benefit to Fedora == |
Revision as of 21:06, 22 December 2009
Easier Python Debugging
Summary
Owner
- Name: David Malcolm
- Email: <dmalcolm@redhat.com>
Current status
- Targeted release: Fedora 41
- Last updated: (DATE)
- Percentage of completion: XX%
Detailed Description
We ship Python wrappers for numerous libraries implemented in C and C++. Bugs in those libraries and in the usage of those libraries can lead to complicated backtraces from gdb, and it can be hard to figure out what's going on at the python level.
For example, see this complex backtrace (relating to bug 536786).
Walking through the stack frames, going up from the bottom (textually), or down from the top (numerically):
- frames 26 and below show a pygtk application starting up.
- An event comes in frame 24/25, and is dispatched into pulsecore (frames 23->18; pstream_packet_callback, pa_context_simple_ack_callback) which:
- calls a Python callback (down to frame 15),
- ...which invokes python code down to frame 3
- ...where it calls back into native code; whereupon the segfault happens, calling Py_DecRef on some object pointer.
We already ship gdbinit in python-devel; copy this to ~/.gdbinit; can then use "pyframe" and other commands to debug things, and figure out where we are in Python code from gdb.
gdb should do this automatically. I plan to hook this in using gdb-archer, and make it automatic:
- Biggest win: automatically display python frame information in PyEval_EvalFrameEx in gdb backtraces, including in ABRT:
- python source file, line number, and function names
- values of locals, if available
- name of function for wrapped C functions
See Alex's work: http://blogs.gnome.org/alexl/2008/11/18/gdb-is-dead-long-live-gdb/
and more recently: http://blogs.gnome.org/alexl/2009/09/21/archer-gdb-macros-for-glib/
I'd want to have the python backtrace work integrated with the glib backtrace work: pygtk regularly shows me backtrace with a mixture of both
Alex's work is in in glib git: http://git.gnome.org/browse/glib/commit/?id=efe9169234e226f594b4254618f35a139338c35f which does a:
gdb.backtrace.push_frame_filter (GFrameFilter)
See http://tromey.com/blog/?p=522 for info on this.
This needs a more recent version of gdb than in F-12; I'll need to build a local copy of "archer-tromey-python" branch of gdb to work on this.