[Howto] Compiling debug Python extensions for non-debug Python
Mike C. Fletcher
mcfletch at rogers.com
Sun Oct 12 05:00:19 EDT 2003
Every few months I get to working on a Python C extension (built with
distutils) and discover a pointer error or the like where I'd like to be
able to step into my DLL and see where the extension is going wonky.
Now, the "proper" way to debug a DLL is apparently to build Python in
debug mode (i.e. with the _d form dll), then build each and every
extension I depend on (in debug mode), and then build each of my own
extensions in debug mode. That takes forever when there's 8 or 9
complex-to-build extensions involved in the system generating the error,
and is pointless when I could just print-debug in 1/100th of the time to
fix the particular error.
Now, it so happens that there's no reason I know of to do all that
rebuilding when all you want to do is to generate a program database and
see what's going on *in your own extension*. You can quite readily
create a debuggable DLL linked against the non-debug Python and all its
extensions with a 2 or 3 line change to msvccompiler.py in distutils. I
discovered that quite a while ago, but as the change is to a core Python
file, I tend to forget about it and overwrite it when I upgrade Python
and then spend a few hours re-discovering the exact switches, so, for my
own memory, and for any other extension writers who want this kind of
down-and-dirty debugging, here's the changes required:
In lib/distutils/msvccompiler.py:
self.compile_options = [
'/nologo',
'/Od', # turn off optimisations (allow debug)
'/MD', '/W3', '/GX',
'/Zi', # create a pdb file for the object files we create,
/Z7 works fine too
]
self.ldflags_shared = [
'/DLL', '/nologo', '/INCREMENTAL:YES',
'/DEBUG', # do debug-mode linking
]
then rebuild, forcing a recompile to make sure everything's been built
with the new flags.
There's probably some perfectly good reason not to do this as the
default for distutils "debug" mode for building a PYD, but I find it
*very* helpful, and hopefully others will as well.
Keywords: Visual C MSVC++ VC++ Win32 debug extension dll pyd distutils
Enjoy all,
Mike
_______________________________________
Mike C. Fletcher
Designer, VR Plumber, Coder
http://members.rogers.com/mcfletch/
More information about the Python-list
mailing list