当信号被捕获时,如何强制 PDB 退出?

How can I force PDB to quit when the signal is being caught?

PDB 的退出命令通过引发异常 (Bdb.BdbQuit) 来工作。如果捕获到该异常,除了杀死整个 shell 之外,我无法找到杀死程序的方法。 CTRL+C 通过引发 KeyboardInterrupt 异常来工作,该异常也可以被捕获。

您可以使用这个简单的脚本重现这个问题。

foo = 0
while True:
    try:
        import pdb; pdb.set_trace()
        foo += 1
    except:
        pass

无法使用退出命令或 CTRL+C 从 PDB 中停止此脚本

我知道这是糟糕的编程,你不应该使用没有异常类型的 except。我问是因为我在调试时 运行 遇到了这个问题,并且第三方库将我困在了循环中。

您可以尝试使用 os._exit 终止 python 进程。

import os
try:
    print("Exiting")
    os._exit(1)
except:
    print("Caught!")

输出:

Exiting