DebugClients/Python3/DebugBase.py

branch
debugger speed
changeset 5046
d57f18f15f1a
parent 5045
50862a6a2c63
child 5048
9899fb545b1f
equal deleted inserted replaced
5045:50862a6a2c63 5046:d57f18f15f1a
188 self.__recursionDepth = 0 188 self.__recursionDepth = 0
189 while frame is not None: 189 while frame is not None:
190 self.__recursionDepth += 1 190 self.__recursionDepth += 1
191 frame = frame.f_back 191 frame = frame.f_back
192 192
193 def profile(self, frame, event, arg): 193 def profileWithRecursion(self, frame, event, arg):
194 """ 194 """
195 Public method used to trace some stuff independent of the debugger 195 Public method used to trace some stuff independent of the debugger
196 trace function. 196 trace function.
197 197
198 @param frame current stack frame. 198 @param frame current stack frame
199 @param event trace event (string) 199 @type frame object
200 @param event trace event
201 @type str
200 @param arg arguments 202 @param arg arguments
203 @type depends on the previous event parameter
201 @exception RuntimeError raised to indicate too many recursions 204 @exception RuntimeError raised to indicate too many recursions
202 """ 205 """
203 if event == 'return': 206 if event == 'return':
204 self.cFrame = frame.f_back 207 self.cFrame = frame.f_back
205 self.__recursionDepth -= 1 208 self.__recursionDepth -= 1
206 self.__sendCallTrace(event, frame, self.cFrame) 209 if self._dbgClient.callTraceEnabled:
210 self.__sendCallTrace(event, frame, self.cFrame)
207 elif event == 'call': 211 elif event == 'call':
208 self.__sendCallTrace(event, self.cFrame, frame) 212 if self._dbgClient.callTraceEnabled:
213 self.__sendCallTrace(event, self.cFrame, frame)
209 self.cFrame = frame 214 self.cFrame = frame
210 self.__recursionDepth += 1 215 self.__recursionDepth += 1
211 if self.__recursionDepth > gRecursionLimit: 216 if self.__recursionDepth > gRecursionLimit:
212 raise RuntimeError( 217 raise RuntimeError(
213 'maximum recursion depth exceeded\n' 218 'maximum recursion depth exceeded\n'
214 '(offending frame is two down the stack)') 219 '(offending frame is two down the stack)')
215 220
221 def profile(self, frame, event, arg):
222 """
223 Public method used to trace some stuff independent of the debugger
224 trace function.
225
226 @param frame current stack frame
227 @type frame object
228 @param event trace event
229 @type str
230 @param arg arguments
231 @type depends on the previous event parameter
232 """
233 if event == 'return':
234 self.__sendCallTrace(event, frame, frame.f_back)
235 elif event == 'call':
236 self.__sendCallTrace(event, frame.f_back, frame)
237
216 def __sendCallTrace(self, event, fromFrame, toFrame): 238 def __sendCallTrace(self, event, fromFrame, toFrame):
217 """ 239 """
218 Private method to send a call/return trace. 240 Private method to send a call/return trace.
219 241
220 @param event trace event (string) 242 @param event trace event
221 @param fromFrame originating frame (frame) 243 @type str
222 @param toFrame destination frame (frame) 244 @param fromFrame originating frame
223 """ 245 @type frame object
224 if self._dbgClient.callTraceEnabled: 246 @param toFrame destination frame
225 if (not self.__skipFrame(fromFrame) and 247 @type frame object
226 not self.__skipFrame(toFrame)): 248 """
227 if event in ["call", "return"]: 249 if not self.__skipFrame(fromFrame) and not self.__skipFrame(toFrame):
228 fr = fromFrame 250 fromStr = "{0}:{1}:{2}".format(
229 fromStr = "{0}:{1}:{2}".format( 251 self._dbgClient.absPath(self.fix_frame_filename(fromFrame)),
230 self._dbgClient.absPath(self.fix_frame_filename(fr)), 252 fromFrame.f_lineno,
231 fr.f_lineno, 253 fromFrame.f_code.co_name)
232 fr.f_code.co_name) 254 toStr = "{0}:{1}:{2}".format(
233 fr = toFrame 255 self._dbgClient.absPath(self.fix_frame_filename(toFrame)),
234 toStr = "{0}:{1}:{2}".format( 256 toFrame.f_lineno,
235 self._dbgClient.absPath(self.fix_frame_filename(fr)), 257 toFrame.f_code.co_name)
236 fr.f_lineno, 258 self._dbgClient.write("{0}{1}@@{2}@@{3}\n".format(
237 fr.f_code.co_name) 259 CallTrace, event[0], fromStr, toStr))
238 self._dbgClient.write("{0}{1}@@{2}@@{3}\n".format(
239 CallTrace, event[0], fromStr, toStr))
240 260
241 def trace_dispatch(self, frame, event, arg): 261 def trace_dispatch(self, frame, event, arg):
242 """ 262 """
243 Public method reimplemented from bdb.py to do some special things. 263 Public method reimplemented from bdb.py to do some special things.
244 264

eric ide

mercurial