当信号被捕获时,如何强制 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
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