Debugging SocketServer.ThreadingTCPServer
Stuart D. Gathman
stuart at bmsi.com
Sat Feb 3 17:52:42 EST 2007
On Tue, 16 Jan 2007 09:11:38 -0500, Jean-Paul Calderone wrote:
> On Tue, 16 Jan 2007 00:23:35 -0500, "Stuart D. Gathman"
> <stuart at bmsi.com> wrote:
>>I have a ThreadingTCPServer application (pygossip, part of
>>http://sourceforge.net/projects/pymilter). It mostly runs well, but
>>occasionally goes into a loop. How can I get a stack trace of running
>>threads to figure out where the loop is? Is there some equivalent of
>>sending SIGQUIT to Java to get a thread dump? If needed, I can import
>>pdb and set options at startup, but there needs to be some external way
>>of triggering the dump since I can't reproduce it at will.
>
> Grab the gdbinit out of Python SVN Misc/ directory. Apply this patch:
>
> http://jcalderone.livejournal.com/28224.html
>
> Attach to the process using gdb. Make sure you have debugging symbols
> in your build of Python. Run 'thread apply all pystack'.
Did this. gdb displays main thread fine (waiting on accept(), duh). But
gdb goes into a loop displaying the first worker thread. There are no
extension modules other than the batteries included ones. In this
application, I believe, only _socket. (I.e. a pure python server.)
I will try for a C stack trace next time it loops.
Also, the looping server needs kill -9. SIGTERM and SIGINT won't stop it.
And after it dies with SIGKILL, the port is still in use for 5 minutes or
so (and the server cannot be restarted).
This is really making me appreciate Java.
--
Stuart D. Gathman <stuart at bmsi.com>
Business Management Systems Inc. Phone: 703 591-0911 Fax: 703 591-6154
"Confutatis maledictis, flamis acribus addictis" - background song for
a Microsoft sponsored "Where do you want to go from here?" commercial.
More information about the Python-list
mailing list