[ http://issues.apache.org/jira/browse/MODPYTHON-91?page=all ] Graham Dumpleton resolved MODPYTHON-91: ---------------------------------------
Fix Version: 3.3 Resolution: Fixed > Improve error message when "quit" run in pdb debugger. > ------------------------------------------------------ > > Key: MODPYTHON-91 > URL: http://issues.apache.org/jira/browse/MODPYTHON-91 > Project: mod_python > Type: Improvement > Components: core > Versions: 3.3 > Reporter: Graham Dumpleton > Assignee: Graham Dumpleton > Priority: Minor > Fix For: 3.3 > > If one has enabled PythonEnablePdb and correctly running "httpd" with > -DONE_PROCESS option, in the debugger, if you run the "quit" command in the > debugger, you get back the result 500 error message reads as: > Mod_python error: "PythonHandler mptest" > Traceback (most recent call last): > File > "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/mod_python/apache.py", > line 313, in HandlerDispatch > assert (type(result) == type(int())), \ > AssertionError: Handler 'mptest' returned invalid return code. > It might be nice to have an error response which actually indicates in some > way that the debugger was explicitly quit for the request that was being > debugged. > The reason that the error above occurs now is that the debugger support uses > the call: > result = pdb.runcall(object, conn) > This ultimately executes bdb.Bdb.runcall(); > def runcall(self, func, *args): > self.reset() > sys.settrace(self.trace_dispatch) > res = None > try: > try: > res = func(*args) > except BdbQuit: > pass > finally: > self.quitting = 1 > sys.settrace(None) > return res > As can be seen, the exception BdbQuit indicating that the "quit" command had > been run is caught and ignored, with the result that None is then returned as > if from the handler itself. This causes the upstream exception to be raised > that the result is not an integer. > One possibility is run replace pdb.runcall() invocation with: > #result = pdb.runcall(object, req) > debugger = pdb.Pdb() > debugger.reset() > sys.settrace(debugger.trace_dispatch) > try: > return object(req) > finally: > debugger.quitting = 1 > sys.settrace(None) > If this is done, the BdbQuit exception ignored and is propogated up. The > error message then at least can be linked better as being related to the > debugger. > Mod_python error: "PythonHandler mptest" > Traceback (most recent call last): > File > "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/mod_python/apache.py", > line 303, in HandlerDispatch > return object(req) > File "/Users/grahamd/Sites/importer/mptest.py", line 5, in handler > req.content_type = 'text/plain' > File "/Users/grahamd/Sites/importer/mptest.py", line 5, in handler > req.content_type = 'text/plain' > File > "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/bdb.py", > line 48, in trace_dispatch > return self.dispatch_line(frame) > File > "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/bdb.py", > line 61, in dispatch_line > if self.quitting: raise BdbQuit > BdbQuit > Alternatively a special purpose error message could be generated to indicate > that the debugging of the handler for that request was explicitly quit. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira