python - 使用 pdb,如何运行程序并在遇到错误时暂停?

标签 python pdb

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

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

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 的值。是因为错误发生后返回到最顶层的帧吗?如何查看最低帧?

谢谢。

最佳答案

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

python -m pdb my_script.py

如果你在解释器中,你可以使用pdb.pm()调试最后的回溯。


或者,使用 IPython 解释器。打字debug在未捕获的异常之后将进入 pdb session 以进行最后的回溯,类似于 pm()

关于python - 使用 pdb,如何运行程序并在遇到错误时暂停?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25799208/

相关文章:

python - 从数据框中获取列并由 python pandas 用作数组

python - ElasticSearch 查询 pandas 数据框

python - 在 Python 代码中放置 PDB 断点的更简单方法?

python - 如何退出pdb并允许程序继续?

python - 调试 Cython 时打印变量时出错

docker - 使 pdb 与 docker 一起工作

python - 从字符串中删除字符

python - pyinstaller导入错误: No module name '_socket'

python - 如何从Python dict生成特定的JSON?

python - pdb 事后调试器自行完成