我一直在玩验尸调试,但遇到了一些问题。考虑以下名为example.py
的python脚本:
k = 0
print 1. / k
print 'continue ...'
我可以用以下方式运行:
> python -m pdb example.py
然后步行到第2行print 1. / k
然后设置k = 1
然后继续使用pdb命令c
。
现在,如果我使用事后调试来执行此操作,则无法继续执行程序。我跑:
> python -i example.py
然后在我进入shell之后我做了一个:
import pdb
pdb.pm()
然后,我可以像以前一样更改k
的值,但是我无法继续执行任何程序。 Pdb只是退出。
我无法在任何地方发现它明确指出你无法在验尸中逐步完成一个程序。情况似乎如此。那么我想了解验尸调试的价值。是错误发生时检查代码状态的唯一值吗?
抛出异常时会调用事后验证。
此时,堆栈不再“活动”,您无法再单步执行代码。毕竟,刚刚抛出异常,表明代码路径不再继续。如果你有表达式result
,你会期望result = 1. / k
是什么?
在患者死亡(死后,拉丁语)之后,使用文字后验尸法来了解死因是什么。 pdb验尸也不例外。你可以看到死亡时节目的状态,但是你不能让死者重新焕发活力。
换句话说,Post Mortem的目的是通过详细检查程序状态在失败时的状态来理解程序失败的原因。
该术语尚未在pdb手册中明确记录,可能是因为术语“Post Mortem”被认为是常用的。 Wikipedia article on debugging顺便提到它,而Python并不是提供该技术的唯一语言; Windows debuggers也提供这个功能,R也是如此,其他人也是如此。