def _excepthook(exctype, value, tb): global _handle_exceptions if _handle_exceptions: exception_breakpoint = get_exception_breakpoint(exctype, _handle_exceptions) else: exception_breakpoint = None #Always call the original excepthook before going on to call the debugger post mortem to show it. _original_excepthook(exctype, value, tb) if not exception_breakpoint: return if tb is None: #sometimes it can be None, e.g. with GTK return frames = [] while tb: frames.append(tb.tb_frame) tb = tb.tb_next thread = threadingCurrentThread() frames_byid = dict([(id(frame),frame) for frame in frames]) frame = frames[-1] thread.additionalInfo.exception = (exctype, value, tb) thread.additionalInfo.pydev_force_stop_at_exception = (frame, frames_byid) thread.additionalInfo.message = exception_breakpoint.qname debugger = GetGlobalDebugger() pydevd_tracing.SetTrace(None) #no tracing from here pydev_log.debug('Handling post-mortem stop on exception breakpoint %s'% exception_breakpoint.qname) debugger.handle_post_mortem_stop(thread.additionalInfo, thread)
def excepthook(exctype, value, tb): global _handle_exceptions if _handle_exceptions is not None: exception_breakpoint = get_exception_breakpoint(exctype, _handle_exceptions, NOTIFY_ON_TERMINATE) else: exception_breakpoint = None if exception_breakpoint is None: return _original_excepthook(exctype, value, tb) # Always call the original excepthook before going on to call the debugger post mortem to show it. _original_excepthook(exctype, value, tb) if tb is None: # sometimes it can be None, e.g. with GTK return frames = [] traceback = tb while tb: frames.append(tb.tb_frame) tb = tb.tb_next thread = threadingCurrentThread() frames_byid = dict([(id(frame), frame) for frame in frames]) frame = frames[-1] thread.additionalInfo.exception = (exctype, value, tb) thread.additionalInfo.pydev_force_stop_at_exception = (frame, frames_byid) thread.additionalInfo.message = exception_breakpoint.qname # sys.exc_info = lambda : (exctype, value, traceback) debugger = GetGlobalDebugger() debugger.force_post_mortem_stop += 1 pydevd_tracing.SetTrace(None) # no tracing from here debugger.handle_post_mortem_stop(thread.additionalInfo, thread)
def excepthook(exctype, value, tb): global _handle_exceptions if _handle_exceptions is not None: exception_breakpoint = get_exception_breakpoint( exctype, _handle_exceptions, NOTIFY_ON_TERMINATE) else: exception_breakpoint = None if exception_breakpoint is None: return _original_excepthook(exctype, value, tb) #Always call the original excepthook before going on to call the debugger post mortem to show it. _original_excepthook(exctype, value, tb) if tb is None: #sometimes it can be None, e.g. with GTK return frames = [] traceback = tb while tb: frames.append(tb.tb_frame) tb = tb.tb_next thread = threadingCurrentThread() frames_byid = dict([(id(frame), frame) for frame in frames]) frame = frames[-1] thread.additionalInfo.exception = (exctype, value, tb) thread.additionalInfo.pydev_force_stop_at_exception = (frame, frames_byid) thread.additionalInfo.message = exception_breakpoint.qname #sys.exc_info = lambda : (exctype, value, traceback) debugger = GetGlobalDebugger() debugger.force_post_mortem_stop += 1 pydevd_tracing.SetTrace(None) #no tracing from here debugger.handle_post_mortem_stop(thread.additionalInfo, thread)