DebugClients/Python3/DebugBase.py

branch
debugger speed
changeset 5046
d57f18f15f1a
parent 5045
50862a6a2c63
child 5048
9899fb545b1f
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):
         """

eric ide

mercurial