VSCode调试中途暂停/新增断点致Python异常无法捕获
VSCode调试Python时动态暂停/新增断点导致异常捕获失效问题
复现示例代码
import contextlib, signal @contextlib.contextmanager def time_limit(seconds): def signal_handler(signum, frame): raise RuntimeError("Timed out!") signal.setitimer(signal.ITIMER_REAL, seconds) signal.signal(signal.SIGALRM, signal_handler) try: yield finally: signal.setitimer(signal.ITIMER_REAL, 0) if __name__ == "__main__": print("start") try: with time_limit(10): a=1 while True: a = -a except RuntimeError: print("timed out") print("finished")
不同调试场景的表现
- 使用暂停功能:异常未被捕获:运行中途点击
pause (F6),程序在a=-a行暂停,超时后抛出RuntimeError,但程序无法捕获该错误,控制台打印回溯信息但仍处于暂停状态,点击continue (F5)后程序会无限运行。 - 使用预设断点:异常被捕获:提前在
a=-a行设置断点,运行程序后在断点处停止,等待数秒后程序会捕获运行时错误并成功结束,不过程序收到异常后会自动继续运行,这一行为也存在异常。 - 中途新增断点:异常未被捕获:程序运行一段时间后在
a=-a行新增断点,会出现与使用暂停功能相同的情况。推测“暂停”功能可能是通过“中途新增断点”实现的,该问题可能与运行时添加断点有关。
补充实验观察
- 使用
Pause功能暂停后,切换到Debug Console,超时后会抛出以下信息:<class 'RuntimeError'> raised from within the callback set in sys.settrace. Debugging will be disabled for this thread (<_MainThread(MainThread, started 140324903388352)>). - 在PyCharm中也发现类似问题,但行为略有不同:VSCode点击
continue(F5)后仍可再次暂停,而PyCharm点击后无法再暂停。
内容的提问来源于stack exchange,提问作者hellohawaii
相关产品推荐
相关产品推荐

