2 Ce module sert à tracer les appels aux methodes pendant
5 Au début de la zone à tracer faire : Trace.begin_trace()
6 à la fin de la zone faire : Trace.end_trace()
26 def begin_trace(filtre=None,upcall=0):
28 if filtre: filter=filtre
30 sys.settrace(trace_dispatch)
38 def compute_level(frame):
39 """Calcule le niveau dans la pile d'execution"""
41 while frame is not None:
47 frame=sys._getframe(1)
48 level=compute_level(frame)
49 print level*cara,frame.f_code.co_name, " : ",frame.f_code.co_filename,frame.f_lineno
51 print level*' ',"-> appele par : ",frame.f_code.co_name,frame.f_code.co_filename,frame.f_lineno
53 def dispatch_call(frame, arg):
54 """ Cette fonction est appelée par trace_dispatch
55 pour tracer les appels à des fonctions ou méthodes
58 level = ldec*(compute_level(frame)-1)
59 name = frame.f_code.co_name
60 if not name: name = '???'
62 print level*cara +' call', name, frame.f_code.co_filename,frame.f_lineno
65 print level*' ',"-> appele par : ",f_back.f_code.co_name,f_back.f_code.co_filename,f_back.f_lineno
67 print "Pb dans dispatch_call: ",frame
70 def dispatch_exception(frame, arg):
71 """ Cette fonction est appelée par trace_dispatch
72 pour tracer les exceptions
75 dec = cara*ldec*(compute_level(frame)+0)
76 name = frame.f_code.co_name
77 if not name: name = '???'
79 print dec,name,'exception',frame.f_code.co_filename,frame.f_lineno,arg[0],arg[1]
81 print "Pb dans dispatch_exception: ",frame
84 def dispatch_return(frame, arg):
85 """ Cette fonction est appelée par trace_dispatch
86 pour tracer les retours de fonction
88 dec = cara*ldec*compute_level(frame)
89 name = frame.f_code.co_name
90 if not name: name = '???'
91 print dec,name,'return', arg
94 def dispatch_line(frame, arg):
95 """ Cette fonction est appelée par trace_dispatch
96 pour tracer les lignes de source
99 name = frame.f_code.co_name
100 if not name: name = '???'
101 fn=frame.f_code.co_filename
102 line = linecache.getline(fn, frame.f_lineno)
103 dec = cara*ldec*compute_level(frame)
104 print dec,name,':',line.strip(),frame.f_lineno
105 return trace_dispatch
107 def trace_dispatch(frame,event,arg):
108 """ Cette fonction sert à tracer tous les appels
109 à des fonctions ou à des méthodes.
111 if _call and event == 'call': return dispatch_call(frame, arg)
112 if _return and event == 'return': return dispatch_return(frame, arg)
113 if _line and event == 'line': return dispatch_line(frame, arg)
114 if _exception and event == 'exception': return dispatch_exception(frame, arg)
115 return trace_dispatch
147 return not frame.f_code.co_name == 'a'
149 begin_trace(filtre=filter,upcall=1)
161 if __name__ == "__main__":