如何在pdb
或ipdb
中修改局部变量?这些调试器有效地忽略对现有本地绑定的更改,例如,这是使用ipython的一个例子。
In [3]: def foo():
...: bar = 123
...: import ipdb; ipdb.set_trace()
...: print bar
...:
In [4]: foo()
> <ipython-input-3-ee9873383395>(4)foo()
3 import ipdb; ipdb.set_trace()
----> 4 print bar
5
ipdb> del bar # effect is limited too the current line
ipdb> bar # bar is still bound to the old value
123
ipdb> del bar; print bar # shows it worked within the line
<function bar at 0x2b7e488>
ipdb> print bar # but the effect goes away on the next debugger line
123
ipdb> c # confirmation that the binding wasn't changed
123
请注意,直接修改locals()
也无效。
如果重要,我使用的是Python 2.6。
背景:我试图调试一些析构函数问题,并希望更明确地控制何时删除每个本地以跟踪我的错误。
编辑:给出了一个完整的独立示例。
编辑2 :这在Python 2.7中至少已部分修复。任何Python 2.6的解决方案仍然会受到赞赏。