rocky at panix.com
Fri Jun 13 13:21:30 CEST 2008
TheSaint <fc14301589 at icqmail.com> writes:
> while testing my program I found some strange happening with pdb and pydb.
> I like pydb because let me restart the program and nicer features, but if
> errors pop up, then it will forget all variables (globals and locals gone).
I'm not completely sure what you mean, but I gather that in
post-mortem debugging you'd like to inspect local variables defined at the
place of error. For example in this program
you'd like to look at x.
Python as a language is a little different than say Ruby. In Python
the handler for the exception is called *after* the stack is unwound
while in Ruby it is called before. What this means to you is basically
what you reported: that you are not going to be able to see some local
variables after an exception occurs (i.e. in post-mortem debugging)
whether pydb, pdb, any debugger or any Python program you write.
This was mentioned a while back:
By the way, although Ruby *does* call the exception handler before the
stack is unwound, there's no way that I know to *clear* the exception
so that you can dynamically "handle" it. This has a certain legitimacy
since it might be dangerous to continue in some exception and the
state of the interpreter may be inconsistent. For example if I write
x = 1/0
if 1/0 > 5 :
what value do I use for 1/0? (Far worse is where something like a SEGV
occurs, but I'm not sure that will raise an exception instead of
> I've to go for pdb because it isn't affected by that problem, but also in
> some case pdb doesn't recognize a fix after a post-mortem restart. The funny
> thing is that it shows the line corrected, but pdb execute the one it put in
> However, I think also python shell has such flaw. I'd like to know how to
> blank all current data and restart a program or re-import a corrected class
> Any other to try?
> I'm also prone to use Ipython, but I still miss some learning how to run a
> program within Ipython itself.
> So if I do:
> import myprogram
> Will it run? And then the other arguments from CLI, how do I pass them in?
> Mailsweeper Home : http://it.geocities.com/call_me_not_now/index.html
More information about the Python-list