Trace dynamically compiled code?

Ed Leafe ed at leafe.com
Tue Mar 14 20:50:42 EST 2006


On Mar 14, 2006, at 12:45 PM, Ziga Seilnacht wrote:

> Try not using bare exec statements, since they pollute the local  
> scope.
> In your example you could use:
>
> compCode = compile(code, "", "exec")
> d = {}
> exec compCode in d
> func = d[nm]

	OK, noted and changed in my source.

>> exec "self.%s = %s.__get__(self)" % (nm, nm)
>
> You don't need dynamic execution here; you can simply use
> setattr and the new module:
>
> import new
> method = new.instancemethod(func, self)
> setattr(self, nm, method)
>
> and yes, I remember that I was the one who suggested you
> the __get__ hack.

	I've made the change you suggested. May I ask why one is better than  
the other? Namespace pollution doesn't seem to be an issue here.

>> 	Does anyone know a way to compile the dynamic code so that pdb can
>> 'see' the source? I suppose I could write it all out to a bunch of
>> temp files, but that would be terribly messy. Are there any neater
>> solutions?
>
> You should check py lib: http://codespeak.net/py/current/doc/ ,
> specifically the py.code "module". Then you can modify the
> function from above:
>
> import inspect
> f = inspect.currentframe()
> lineno = f.f_lineno - 5 # or some other constant
> filename = f.f_code.co_filename
>
> import py
> co = py.code.Code(func)
> new_code = co.new(co_lineno=lineno, co_filename=filename)
> new_func = new.function(new_code, func.func_globals, nm,
>                         func.func_defaults, func.func_closure)

	OK, thanks for the lead. I will take a look at this as soon as I  
have the time to sit down and attempt to digest it. But before I do,  
will I be able to add code like this to the same part of the  
framework where the dynamic code is created, and have it work? I ask  
this because an even bigger problem is the matter of creating dynamic  
classes on the fly from saved XML files. I have a class that converts  
the XML to the corresponding Python code for the class, and it's  
working great, except for the tracing through the debugger issue.  
Would I be able to apply the py lib stuff to this, too?

-- Ed Leafe
-- http://leafe.com
-- http://dabodev.com






More information about the Python-list mailing list