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 |