diff -r 50862a6a2c63 -r d57f18f15f1a DebugClients/Python3/DebugBase.py --- a/DebugClients/Python3/DebugBase.py Tue Jul 19 22:20:51 2016 +0200 +++ b/DebugClients/Python3/DebugBase.py Wed Jul 20 22:14:24 2016 +0200 @@ -190,22 +190,27 @@ self.__recursionDepth += 1 frame = frame.f_back - def profile(self, frame, event, arg): + def profileWithRecursion(self, frame, event, arg): """ Public method used to trace some stuff independent of the debugger trace function. - @param frame current stack frame. - @param event trace event (string) + @param frame current stack frame + @type frame object + @param event trace event + @type str @param arg arguments + @type depends on the previous event parameter @exception RuntimeError raised to indicate too many recursions """ if event == 'return': self.cFrame = frame.f_back self.__recursionDepth -= 1 - self.__sendCallTrace(event, frame, self.cFrame) + if self._dbgClient.callTraceEnabled: + self.__sendCallTrace(event, frame, self.cFrame) elif event == 'call': - self.__sendCallTrace(event, self.cFrame, frame) + if self._dbgClient.callTraceEnabled: + self.__sendCallTrace(event, self.cFrame, frame) self.cFrame = frame self.__recursionDepth += 1 if self.__recursionDepth > gRecursionLimit: @@ -213,30 +218,45 @@ 'maximum recursion depth exceeded\n' '(offending frame is two down the stack)') + def profile(self, frame, event, arg): + """ + Public method used to trace some stuff independent of the debugger + trace function. + + @param frame current stack frame + @type frame object + @param event trace event + @type str + @param arg arguments + @type depends on the previous event parameter + """ + if event == 'return': + self.__sendCallTrace(event, frame, frame.f_back) + elif event == 'call': + self.__sendCallTrace(event, frame.f_back, frame) + def __sendCallTrace(self, event, fromFrame, toFrame): """ Private method to send a call/return trace. - @param event trace event (string) - @param fromFrame originating frame (frame) - @param toFrame destination frame (frame) + @param event trace event + @type str + @param fromFrame originating frame + @type frame object + @param toFrame destination frame + @type frame object """ - if self._dbgClient.callTraceEnabled: - if (not self.__skipFrame(fromFrame) and - not self.__skipFrame(toFrame)): - if event in ["call", "return"]: - fr = fromFrame - fromStr = "{0}:{1}:{2}".format( - self._dbgClient.absPath(self.fix_frame_filename(fr)), - fr.f_lineno, - fr.f_code.co_name) - fr = toFrame - toStr = "{0}:{1}:{2}".format( - self._dbgClient.absPath(self.fix_frame_filename(fr)), - fr.f_lineno, - fr.f_code.co_name) - self._dbgClient.write("{0}{1}@@{2}@@{3}\n".format( - CallTrace, event[0], fromStr, toStr)) + if not self.__skipFrame(fromFrame) and not self.__skipFrame(toFrame): + fromStr = "{0}:{1}:{2}".format( + self._dbgClient.absPath(self.fix_frame_filename(fromFrame)), + fromFrame.f_lineno, + fromFrame.f_code.co_name) + toStr = "{0}:{1}:{2}".format( + self._dbgClient.absPath(self.fix_frame_filename(toFrame)), + toFrame.f_lineno, + toFrame.f_code.co_name) + self._dbgClient.write("{0}{1}@@{2}@@{3}\n".format( + CallTrace, event[0], fromStr, toStr)) def trace_dispatch(self, frame, event, arg): """