[IronPython] Traceback Stack Bugs

Michael Foord fuzzyman at voidspace.org.uk
Sat Jan 6 13:28:28 CET 2007


Haibo Luo wrote:
> This is related to http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=2912. We are currently working on it.
> 

Cool. Is this the same bug as the following :

Code :

import sys
def extract_tb():
     tb = sys.exc_info()[2]
     stackInfo = []
     while tb:
         f = tb.tb_frame
         lineno = tb.tb_lineno
         co = f.f_code
         filename = co.co_filename
         stackInfo.append((filename, lineno))
         tb = tb.tb_next
     return stackInfo


code = """
raise NameError('An Error')
"""
codeobj = compile(code, '<S>', 'exec')
try:
     exec(codeobj, {})
except:
     print extract_tb()


CPython output :
[('c:\\Python Projects\\modules in 
progress\\ironpython\\tracebackBug.py', 20),
('<S>', 2)]

IronPython output :
[('<S>', 2)]

I still can't reproduce the bug we found with Resolver where the 
traceback stack would grow and grow...

Michael
http://www.voidspace.org.uk/ironpython/index.shtml


> Thanks for reporting this.
> 
> -----Original Message-----
> From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Michael Foord
> Sent: Friday, January 05, 2007 4:58 PM
> To: Discussion of IronPython
> Subject: [IronPython] Traceback Stack Bugs
> 
> Hello team,
> 
> Whilst optimising Resolver we discovered a bug in the handling of
> traceback objects with IronPython.
> 
> The following code behaves differently under IronPython and CPython :
> 
> import sys
> def extract_tb():
>      tb = sys.exc_info()[2]
>      stackInfo = []
>      while tb:
>          f = tb.tb_frame
>          lineno = tb.tb_lineno
>          co = f.f_code
>          filename = co.co_filename
>          stackInfo.append((filename, lineno))
>          tb = tb.tb_next
>      return stackInfo
> 
> try:
>      raise ValueError('stuff')
> except:
>      print extract_tb()
> 
> try:
>      raise ValueError('stuff')
> except:
>      print extract_tb()
> 
> 
> Under IronPython :
> 
> []
> []
> 
> 
> Under CPython :
> 
> [('C:\\Python Projects\\modules in
> progress\\ironpython\\tracebackBug.py', 15)]
> [('C:\\Python Projects\\modules in
> progress\\ironpython\\tracebackBug.py', 20)]
> 
> If you exec a compiled code object which raises an exception (instead of
> directly raising the error) the CPython traceback starts with the Python
> code, whereas the IronPython traceback starts with the code object and
> goes no further back. (So a different bug...)
> 
> The bug I was actually trying to expose is that in Resolver we were
> finding that the traceback objects were not being cleared out - the
> stack (using the extract_tb function above) was getting longer and
> longer. Adding an explicit sys.clear_exc() solved our problem, but it
> foxed us for a while.
> 
> Unfortunately I can't reproduce this bug easily - but you can see that
> something screwy is going on.
> 
> Michael
> http://www.voidspace.org.uk/ironpython/index.shtml
> _______________________________________________
> users mailing list
> users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> _______________________________________________
> users mailing list
> users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> 
> 




More information about the Ironpython-users mailing list