[Python-Dev] How to debug pyexpat SIGSEGV with GDB?

Michael Hudson mwh at python.net
Sat Feb 28 07:46:39 EST 2004


"Brad Clements" <bkc at murkworks.com> writes:

> Sorry if this is OT.

Marginally.

> I've hit a repeatable segfault in pyexpat on RH Linux 9 with Python
> 2.3.3 (I'm trying rss2email).
>
> It seems that XML_parse is returning an error, but when
> XML_GetCurrentLineNumber is called positionPtr is not valid.
>
> I catch this in GDB and have looked at the stack (see below), but
> when I get back up the stack into PyCFunction_Call I don't know what
> to do.

That's possibly because you haven't gone far enough.  PyCFunction_Call
is what you call to execute a builtin function.  You need to work your
way a couple more levels up the stack.

> Ideally, I want to find out the Python source file and line number
> that is currently being executed, then look at the Python source to
> figure out exactly which pyexpat call is being made just before the
> call to get_parse_result.
>
> It seems strange that (it appears) that Python code is calling
> get_parse_result directly.

Build a debug build, maybe?

If a function looks like:

PyObject* foo()
{
    /* stuff with no function calls, or only inlineable 
       function calls */

    return Function(args);
}

gcc, at least, will not set up a stack frame for foo.

> So, how can I figure out where in the Python source the function
> call is coming from using gdb? I'm sure it involves "print" and some
> casts.. I couldn't find a howto on python.org

Read lots of source.

Cheers,
mwh

-- 
31. Simplicity does not precede complexity, but follows it.
  -- Alan Perlis, http://www.cs.yale.edu/homes/perlis-alan/quotes.html



More information about the Python-Dev mailing list