On Tue, 23 Mar 2010 12:16:03 pm Jojo Mwebaze wrote: > Hello Tutor > > I have two problems, any help will be highly appreciated. > > How is possible to trace the all method calls, object instantiations, > variables used in running an experiment dynamically, without putting > print - or log statements in my code? - some sort of provenance!
Look at the profile module for starters. >>> def test(x): ... y = -42 ... for i in xrange(10000): ... y += func(i) ... return x + y ... >>> def func(x): ... return x ... >>> >>> import profile >>> profile.run("test(3)") 10004 function calls in 0.286 CPU seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.002 0.002 0.002 0.002 :0(setprofile) 10000 0.145 0.000 0.145 0.000 <stdin>:1(func) 1 0.139 0.139 0.284 0.284 <stdin>:1(test) 1 0.000 0.000 0.284 0.284 <string>:1(<module>) 0 0.000 0.000 profile:0(profiler) 1 0.000 0.000 0.286 0.286 profile:0(test(3)) > I would like to create a tool that can look into pyc files to find > classes/methods that was executed without looking the the source > code. Is this possible in python. Look at the dis module. >>> import dis >>> dis.dis(test) 2 0 LOAD_CONST 1 (-42) 3 STORE_FAST 1 (y) 3 6 SETUP_LOOP 36 (to 45) 9 LOAD_GLOBAL 0 (xrange) 12 LOAD_CONST 2 (10000) 15 CALL_FUNCTION 1 18 GET_ITER >> 19 FOR_ITER 22 (to 44) 22 STORE_FAST 2 (i) 4 25 LOAD_FAST 1 (y) 28 LOAD_GLOBAL 1 (func) 31 LOAD_FAST 2 (i) 34 CALL_FUNCTION 1 37 INPLACE_ADD 38 STORE_FAST 1 (y) 41 JUMP_ABSOLUTE 19 >> 44 POP_BLOCK 5 >> 45 LOAD_FAST 0 (x) 48 LOAD_FAST 1 (y) 51 BINARY_ADD 52 RETURN_VALUE -- Steven D'Aprano _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor