Uploaded image for project: 'mod_python'
  1. mod_python
  2. MODPYTHON-91

Improve error message when "quit" run in pdb debugger.

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 3.3.x
    • Fix Version/s: 3.3.1
    • Component/s: core
    • Labels:
      None

      Description

      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.

        Activity

        Hide
        grahamd Graham Dumpleton added a comment -

        Whoops, that should be:

        #result = pdb.runcall(object, req)

        debugger = pdb.Pdb()
        debugger.reset()
        sys.settrace(debugger.trace_dispatch)
        try:
        result = object(req)
        finally:
        debugger.quitting = 1
        sys.settrace(None)

        Show
        grahamd Graham Dumpleton added a comment - Whoops, that should be: #result = pdb.runcall(object, req) debugger = pdb.Pdb() debugger.reset() sys.settrace(debugger.trace_dispatch) try: result = object(req) finally: debugger.quitting = 1 sys.settrace(None)
        Hide
        grahamd Graham Dumpleton added a comment -

        Linked issues which will be addressed by rewritten module importer and top level handler dispatcher.

        Show
        grahamd Graham Dumpleton added a comment - Linked issues which will be addressed by rewritten module importer and top level handler dispatcher.

          People

          • Assignee:
            grahamd Graham Dumpleton
            Reporter:
            grahamd Graham Dumpleton
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development