def handle_breakpoint(frame, thread, global_debugger, breakpoint): # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint new_frame = frame condition = breakpoint.condition info = thread.additional_info if condition is not None: handle_breakpoint_condition(global_debugger, info, breakpoint, new_frame, False) if breakpoint.expression is not None: handle_breakpoint_expression(breakpoint, info, new_frame) if breakpoint.suspend_policy == "ALL": global_debugger.suspend_all_other_threads(thread) return True
def _excepthook(exctype, value, tb): from _pydevd_bundle.pydevd_frame import handle_breakpoint_condition, handle_breakpoint_expression 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 if exctype is KeyboardInterrupt: return frames = [] debugger = get_global_debugger() user_frame = None while tb: frame = tb.tb_frame if exception_breakpoint.ignore_libraries and not debugger.not_in_scope(frame.f_code.co_filename): user_frame = tb.tb_frame frames.append(tb.tb_frame) tb = tb.tb_next thread = threadingCurrentThread() frames_byid = dict([(id(frame),frame) for frame in frames]) if exception_breakpoint.ignore_libraries and user_frame is not None: frame = user_frame else: frame = frames[-1] exception = (exctype, value, tb) _set_additional_info_if_needed(thread) info = thread.additional_info add_exception_to_frame(frame, exception) if exception_breakpoint.condition is not None: eval_result = handle_breakpoint_condition(debugger, info, exception_breakpoint, frame) if not eval_result: return if exception_breakpoint.expression is not None: handle_breakpoint_expression(exception_breakpoint, info, frame) try: thread.additional_info.pydev_message = exception_breakpoint.qname except: thread.additional_info.pydev_message = exception_breakpoint.qname.encode('utf-8') 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, frame, frames_byid, exception)
def stop_on_unhandled_exception(py_db, thread, additional_info, exctype, value, tb): from _pydevd_bundle.pydevd_frame import handle_breakpoint_condition, handle_breakpoint_expression break_on_uncaught_exceptions = py_db.break_on_uncaught_exceptions if break_on_uncaught_exceptions: exception_breakpoint = get_exception_breakpoint( exctype, break_on_uncaught_exceptions) else: exception_breakpoint = None if not exception_breakpoint: return if tb is None: # sometimes it can be None, e.g. with GTK return if exctype is KeyboardInterrupt: return frames = [] user_frame = None while tb: frame = tb.tb_frame if exception_breakpoint.ignore_libraries and py_db.in_project_scope( frame.f_code.co_filename): user_frame = tb.tb_frame frames.append(tb.tb_frame) tb = tb.tb_next frames_byid = dict([(id(frame), frame) for frame in frames]) if exception_breakpoint.ignore_libraries and user_frame is not None: frame = user_frame else: frame = frames[-1] exception = (exctype, value, tb) add_exception_to_frame(frame, exception) if exception_breakpoint.condition is not None: eval_result = handle_breakpoint_condition(py_db, additional_info, exception_breakpoint, frame) if not eval_result: return if exception_breakpoint.expression is not None: handle_breakpoint_expression(exception_breakpoint, additional_info, frame) try: additional_info.pydev_message = exception_breakpoint.qname except: additional_info.pydev_message = exception_breakpoint.qname.encode( 'utf-8') pydev_log.debug('Handling post-mortem stop on exception breakpoint %s' % (exception_breakpoint.qname, )) py_db.stop_on_unhandled_exception(thread, frame, frames_byid, exception)
def stop_on_unhandled_exception(py_db, thread, additional_info, arg): from _pydevd_bundle.pydevd_frame import handle_breakpoint_condition, handle_breakpoint_expression exctype, value, tb = arg break_on_uncaught_exceptions = py_db.break_on_uncaught_exceptions if break_on_uncaught_exceptions: exception_breakpoint = get_exception_breakpoint(exctype, break_on_uncaught_exceptions) else: exception_breakpoint = None if not exception_breakpoint: return if tb is None: # sometimes it can be None, e.g. with GTK return if exctype is KeyboardInterrupt: return frames = [] user_frame = None while tb: frame = tb.tb_frame if exception_breakpoint.ignore_libraries and py_db.in_project_scope(frame.f_code.co_filename): user_frame = tb.tb_frame frames.append(tb.tb_frame) tb = tb.tb_next frames_byid = dict([(id(frame), frame) for frame in frames]) if exception_breakpoint.ignore_libraries and user_frame is not None: frame = user_frame else: frame = frames[-1] add_exception_to_frame(frame, arg) if exception_breakpoint.condition is not None: eval_result = handle_breakpoint_condition(py_db, additional_info, exception_breakpoint, frame) if not eval_result: return if exception_breakpoint.expression is not None: handle_breakpoint_expression(exception_breakpoint, additional_info, frame) try: additional_info.pydev_message = exception_breakpoint.qname except: additional_info.pydev_message = exception_breakpoint.qname.encode('utf-8') pydev_log.debug('Handling post-mortem stop on exception breakpoint %s' % (exception_breakpoint.qname,)) py_db.stop_on_unhandled_exception(thread, frame, frames_byid, arg)
def handle_breakpoint(frame, thread, global_debugger, breakpoint): # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint new_frame = frame info = thread.additional_info if breakpoint.has_condition: eval_result = handle_breakpoint_condition(global_debugger, info, breakpoint, new_frame) if not eval_result: return False if breakpoint.expression is not None: handle_breakpoint_expression(breakpoint, info, new_frame) if breakpoint.is_logpoint and info.pydev_message is not None and len(info.pydev_message) > 0: cmd = global_debugger.cmd_factory.make_io_message(info.pydev_message + os.linesep, '1') global_debugger.writer.add_command(cmd) return False return True
def handle_breakpoint(frame, thread, global_debugger, breakpoint): # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint new_frame = frame condition = breakpoint.condition info = thread.additional_info if condition is not None: eval_result = handle_breakpoint_condition(global_debugger, info, breakpoint, new_frame) if not eval_result: return False if breakpoint.expression is not None: handle_breakpoint_expression(breakpoint, info, new_frame) if breakpoint.suspend_policy == "ALL": global_debugger.suspend_all_other_threads(thread) return True
def handle_breakpoint(frame, thread, global_debugger, breakpoint): # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint new_frame = frame info = thread.additional_info eval_result = False if breakpoint.has_condition: eval_result = handle_breakpoint_condition(global_debugger, info, breakpoint, new_frame) if breakpoint.expression is not None: handle_breakpoint_expression(breakpoint, info, new_frame) if breakpoint.is_logpoint and info.pydev_message is not None and len(info.pydev_message) > 0: cmd = global_debugger.cmd_factory.make_io_message(info.pydev_message + os.linesep, '1') global_debugger.writer.add_command(cmd) if breakpoint.has_condition and not eval_result: return False return True
def _excepthook(exctype, value, tb): from _pydevd_bundle.pydevd_frame import handle_breakpoint_condition, handle_breakpoint_expression 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 if exctype is KeyboardInterrupt: return frames = [] debugger = get_global_debugger() user_frame = None while tb: frame = tb.tb_frame if exception_breakpoint.ignore_libraries and not debugger.not_in_scope( frame.f_code.co_filename): user_frame = tb.tb_frame frames.append(tb.tb_frame) tb = tb.tb_next thread = threadingCurrentThread() frames_byid = dict([(id(frame), frame) for frame in frames]) if exception_breakpoint.ignore_libraries and user_frame is not None: frame = user_frame else: frame = frames[-1] exception = (exctype, value, tb) _set_additional_info_if_needed(thread) info = thread.additional_info add_exception_to_frame(frame, exception) if exception_breakpoint.condition is not None: eval_result = handle_breakpoint_condition(debugger, info, exception_breakpoint, frame) if not eval_result: return if exception_breakpoint.expression is not None: handle_breakpoint_expression(exception_breakpoint, info, frame) try: thread.additional_info.pydev_message = exception_breakpoint.qname except: thread.additional_info.pydev_message = exception_breakpoint.qname.encode( 'utf-8') 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, frame, frames_byid, exception)