Contents

Easy debugging of C/C++/CUDA python extensions

Contents

Writing an extension called by python (in C, C++ or CUDA)? Not working? Typical.

When doing the same from R it’s pretty easy to debug, just run with R -d <debugger name> e.g. R -d valgrind or R -d gdb you get into the debugger, continue, then run interactively as usual. (For a more complex example using both at once see this blog post).

Doing this from python seems trickier to me. I started off following this guide: https://johnfoster.pge.utexas.edu/blog/posts/debugging-cc%2B%2B-libraries-called-by-python/ But I’m not really an ipython user, and prefer gdb over lldb (due to familiarity). I think this is a good way to do this if you need an interactive python session, but really this is overcomplicated for my typical use case.

Now all I do is run (say I’m debugging CUDA code): cuda-gdb python

Then in the debugger (an example with pp-sketchlib):

set args ~/installs/pp-sketchlib/pp_sketch-runner.py --sketch --rfile rfile_test.txt --ref-db Pf6 --cpus 8 --use-gpu
r

Works just fine, just remember to compile with the debug flags on:

python setup.py build_ext --debug install