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()
12 sys.settrace(trace_dispatch)
18 return (filename[-10:] == 'Tkinter.py') or (filename[:21] == '/home01/chris/pkg/Pmw')
25 def compute_level(frame):
26 """Calcule le niveau dans la pile d'execution"""
28 while frame is not None:
34 def dispatch_call(frame, arg):
35 """ Cette fonction est appelée par trace_dispatch
36 pour tracer les appels à des fonctions ou méthodes
40 dec = cara*ldec*compute_level(frame)
41 name = frame.f_code.co_name
42 if not name: name = '???'
43 if not filter(frame.f_code.co_filename):
44 print dec +' call', name, frame.f_lineno,frame.f_code.co_filename
45 # La trace des appels suivants est decalee de +
48 print "Pb dans dispatch_call: ",frame,curframe
51 def dispatch_exception(frame, arg):
52 """ Cette fonction est appelée par trace_dispatch
53 pour tracer les exceptions
57 dec = cara*ldec*(compute_level(frame)+1)
58 name = frame.f_code.co_name
59 if not name: name = '???'
60 if not filter(frame.f_code.co_filename):
61 print dec+' exception', name, frame.f_lineno,frame.f_code.co_filename,arg[0],arg[1]
63 print "Pb dans dispatch_exception: ",frame,curframe
66 def dispatch_return(frame, arg):
67 """ Cette fonction est appelée par trace_dispatch
68 pour tracer les retours de fonction
71 # print dec+' return', arg
72 dec = cara*ldec*compute_level(frame)
75 def dispatch_line(frame, arg):
76 """ Cette fonction est appelée par trace_dispatch
77 pour tracer les lignes de source
80 name = frame.f_code.co_name
81 if not name: name = '???'
82 fn=frame.f_code.co_filename
83 line = linecache.getline(fn, frame.f_lineno)
84 print dec,name,frame.f_lineno,':',line.strip()
87 def trace_dispatch(frame,event,arg):
88 """ Cette fonction sert à tracer tous les appels
89 à des fonctions ou à des méthodes.
91 if event == 'call': return dispatch_call(frame, arg)
92 if event == 'return': return dispatch_return(frame, arg)
93 # if event == 'line': return dispatch_line(frame, arg)
94 if event == 'exception': return dispatch_exception(frame, arg)
138 if __name__ == "__main__":