DebugClients/Python/DebugBase.py

branch
debugger speed
changeset 5207
7283629b02c0
parent 5206
997064ba25d6
child 5208
aa8045780ce4
equal deleted inserted replaced
5206:997064ba25d6 5207:7283629b02c0
91 # frames, where we want to stop or release debugger 91 # frames, where we want to stop or release debugger
92 self.botframe = None 92 self.botframe = None
93 self.stopframe = None 93 self.stopframe = None
94 self.returnframe = None 94 self.returnframe = None
95 self.stop_everywhere = False 95 self.stop_everywhere = False
96
97 # provide a hook to perform a hard breakpoint
98 # Use it like this:
99 # if hasattr(sys, 'breakpoint): sys.breakpoint()
100 sys.breakpoint = self.set_trace
101 96
102 self.__recursionDepth = -1 97 self.__recursionDepth = -1
103 self.setRecursionDepth(inspect.currentframe()) 98 self.setRecursionDepth(inspect.currentframe())
104 99
105 # background task to periodicaly check for client interactions 100 # background task to periodicaly check for client interactions
397 392
398 self.stop_everywhere = True 393 self.stop_everywhere = True
399 sys.settrace(self.trace_dispatch) 394 sys.settrace(self.trace_dispatch)
400 sys.setprofile(self._dbgClient.callTraceEnabled) 395 sys.setprofile(self._dbgClient.callTraceEnabled)
401 396
397 def bootstrap(self):
398 """
399 Public method to bootstrap the thread.
400
401 It wraps the call to the user function to enable tracing
402 before hand.
403 """
404 try:
405 self._threadRunning = True
406 self.traceThread()
407 self._target(*self._args, **self._kwargs)
408 except SystemExit:
409 pass
410 finally:
411 self._threadRunning = False
412 self.quitting = True
413 self._dbgClient.threadTerminated(self)
414 sys.settrace(None)
415 sys.setprofile(None)
416
402 def run(self, cmd, globals=None, locals=None): 417 def run(self, cmd, globals=None, locals=None):
403 """ 418 """
404 Public method to start a given command under debugger control. 419 Public method to start a given command under debugger control.
405 420
406 @param cmd command / code to execute under debugger control 421 @param cmd command / code to execute under debugger control
666 681
667 fname = self._dbgClient.absPath(self.fix_frame_filename(fr)) 682 fname = self._dbgClient.absPath(self.fix_frame_filename(fr))
668 # Always show at least one stack frame, even if it's from eric. 683 # Always show at least one stack frame, even if it's from eric.
669 if stack and os.path.basename(fname).startswith( 684 if stack and os.path.basename(fname).startswith(
670 ("DebugBase.py", "DebugClientBase.py", 685 ("DebugBase.py", "DebugClientBase.py",
671 "ThreadExtension.py", "threading.py")): 686 "ThreadExtension.py", "threading.py")):
672 break 687 break
673 688
674 fline = fr.f_lineno 689 fline = fr.f_lineno
675 ffunc = fr.f_code.co_name 690 ffunc = fr.f_code.co_name
676 691

eric ide

mercurial