Python中的Post-Mortem调试是否允许步进或继续?

Roc*_*man 8 python debugging pdb

我一直在玩验尸调试,但遇到了一些问题.考虑以下pyton脚本example.py:

k = 0
print 1. / k
print 'continue ...'
Run Code Online (Sandbox Code Playgroud)

我可以用以下方式运行:

> python -m pdb example.py
Run Code Online (Sandbox Code Playgroud)

然后跳到第2行print 1. / k然后设置k = 1然后继续使用pdb命令c.

现在,如果我使用事后调试来执行此操作,则无法继续执行程序.我跑:

> python -i example.py
Run Code Online (Sandbox Code Playgroud)

然后在我进入shell之后我做了一个:

import pdb
pdb.pm()
Run Code Online (Sandbox Code Playgroud)

然后我可以k像以前一样更改值,但是我无法继续执行任何程序.Pdb只是退出.

我无法在任何地方发现它明确指出你无法在验尸中逐步完成一个程序.情况似乎如此.那么我想要了解验尸调试的价值.是错误发生时检查代码状态的唯一值吗?

Mar*_*ers 9

抛出异常时会调用事后验证.

此时,堆栈不再"活动",您无法再单步执行代码.毕竟,刚刚抛出异常,表明代码路径不再继续.result如果你有表达式result = 1. / k,你会期望什么?

在患者死亡(死后,拉丁语)之后,使用文字后验尸法来了解死因是什么.pdb验尸也不例外.你可以看到死亡时节目的状态,但是你不能让死者重新焕发活力.

换句话说,验尸的目的是为了了解为什么程序出现故障,通过检查,详细,什么程序状态是在故障瞬间.

该术语尚未在pdb手册中明确记录,可能是因为术语"Post Mortem"被认为是常用的.关于调试维基百科文章提到了它,而Python并不是唯一提供该技术的语言; Windows调试器也提供该功能,R也是如此.