DebugClients/Python/DebugBase.py

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

eric ide

mercurial