使用 shebang 时自动调用 pdb/ipdb?

Automatically invoking pdb/ipdb while using shebang?

我想在我的脚本中使用 shebang 行,例如

#! /usr/env/bin python

但在调试时我还希望 pdb/ipdb 被自动调用,如:

python -m ipdb myscript.py

有没有办法把它们结合起来?换句话说,是否有一个版本的 shebang 也会在失败时自动调用 pdb/ipdb?类似于:

#! /usr/env/bin python -m ipdb

您不能轻易地在 shebang 行上传递额外的参数,因为 shell 不会解析出参数。有work-arounds for that.

不过,我会在异常时调用 post-mortem 调试器。如果您的脚本中有 main() 函数,我会使用:

try:
    main()
except Exception:
    import ipdb, sys
    ipdb.post_mortem(sys.exc_info()[2])

其中 ipdb.post_mortem() 必须采用回溯对象。 pdb.post_mortem() 版本不需要它,因为如果没有传入回溯,它会自行选择它。