如何让debugpy仅在触发异常时暂停执行并等待客户端连接?
解决debugpy仅在异常时等待客户端连接的问题
直接用命令行的--wait-for-client参数会让程序启动就暂停,不符合你的需求。正确的做法是在代码中手动集成debugpy,自定义异常触发逻辑:
具体实现步骤
- 在业务代码开头导入debugpy和sys,初始化监听但不立即等待客户端
- 自定义异常处理函数,在异常发生时触发debugpy等待连接并启动调试
示例代码(example.py)
import debugpy import sys # 启动debugpy监听指定地址和端口,不立即等待客户端 debugpy.listen(("0.0.0.0", 2345)) def debug_on_exception(exc_type, exc_value, exc_traceback): # 异常发生时,打印提示并等待调试客户端连接 print(f"触发异常: {exc_type.__name__}: {exc_value},等待调试客户端接入...") debugpy.wait_for_client() # 触发断点,让调试器捕获异常栈 debugpy.breakpoint() # 保留默认异常处理逻辑(可选) sys.__excepthook__(exc_type, exc_value, exc_traceback) # 替换默认的异常处理函数 sys.excepthook = debug_on_exception # 你的业务逻辑代码 if __name__ == "__main__": print("程序正常运行中...") # 测试用:取消注释下面一行可触发异常 # 1 / 0 print("程序无异常执行完成")
使用方式
直接运行你的脚本,不需要加debugpy的命令行参数:
python3 example.py
- 程序正常运行时会一直执行,不会暂停
- 当触发异常时,程序会阻塞并等待调试客户端连接,此时用VSCode或其他支持debugpy的调试工具连接到
0.0.0.0:2345,即可进入调试状态查看异常详情
为什么之前的方法无效?
- 命令行的
--wait-for-client是全局配置,会强制程序启动阶段就暂停等待连接,无法区分是否有异常 - 单纯修改excepthook但没正确调用debugpy的
wait_for_client()和breakpoint()方法,所以无法触发调试等待逻辑
内容的提问来源于stack exchange,提问作者Anonymous Bot
相关产品推荐
相关产品推荐

