使用pdb,如何运行程序并暂停到达错误的位置?

时间:2014-09-12 01:05:25

标签: python pdb

使用python解释器和/或pdb,我们可以运行程序并在出现错误时暂停,这样我就可以检查程序调用堆栈的所有帧。崩溃?

当我直接在python解释器中运行程序时,当遇到错误时,它会告诉它发生的代码行,但它似乎返回到最顶层的框架,我无法检查实际发生错误的框架。 E.g。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "test.py", line 194, in <module>
    addlevel(root_toc, 0)
  File "test.py", line 191, in addlevel
    addlevel(child, root_level+1)
  File "test.py", line 188, in addlevel
    root.value.append(root_level)
AttributeError: 'str' object has no attribute 'append'
>>> root_level
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'root_level' is not defined

错误发生在最低帧,我无法检查该帧的root_level值。是因为它在错误发生后返回到最顶层的框架?如何检查最低帧?

感谢。

1 个答案:

答案 0 :(得分:6)

将pdb作为模块运行,传递要调试的脚本。它将在异常退出时中断。 (这在the docs的早期提到过。)

python -m pdb my_script.py

如果您在翻译中,可以使用pdb.pm()调试最后一次追溯。


或者,使用IPython解释器。在未捕获的异常后键入debug将进入最后一次回溯的pdb会话,类似于pm()