From Fedora Project Wiki
Important.png
Comments and Explanations
The page source contains comments providing guidance to fill out each section. They are invisible when viewing this page. To read it, choose the "edit" link.
Copy the source to a new page before making changes! DO NOT EDIT THIS TEMPLATE FOR YOUR FEATURE.
Important.png
Set a watch on your new page so that you are notified of changes to it by others, including the Feature Wrangler
Note.png
All sections of this template are required for review by FESCo. If any sections are empty it will not be reviewed



Easier Python Debugging

Summary

Owner

  • Email: <dmalcolm@redhat.com>

Current status

  • Targeted release: Fedora 40
  • 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

Benefit to Fedora

Scope

How To Test

User Experience

Dependencies

Contingency Plan

Documentation

Release Notes

Comments and Discussion