在Visual Studio Code中禁用debugpy/pydevd的属性求值
解决debugpy调试时触发数据库属性访问的问题
关于超时设置的疑问
- 缩短
PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT会提前终止属性求值:当属性访问耗时超过设置的阈值,debugpy会停止等待并抛出警告,不会等到30秒的内部上限。 - 设置为0不会禁用属性访问,仅会关闭慢属性的警告提示,但debugpy仍会尝试访问所有属性,依然会触发数据库查询。
完全禁用属性求值的方案
1. 全局禁用自动属性求值
在VS Code的调试配置文件launch.json中添加环境变量配置,全局关闭debugger的自动属性解析:
"env": { "PYDEVD_DISABLE_VALUES_EVALUATION": "1" }
该方式会停止所有对象的属性自动求值,适合全局规避此类问题,但会导致调试时无法直观查看对象属性。
2. 按需限制特定对象的可访问属性(推荐)
给目标类添加__dir__方法,仅返回无需触发数据库查询的属性列表,debugpy会依据此列表解析属性:
class Study: def __dir__(self): # 只返回无DB查询的属性 return ["id", "name", "created_at"]
3. 临时禁用当前帧的属性求值
在调试会话进入目标帧时,可在VS Code调试控制台执行命令临时关闭属性求值:
import debugpy debugpy.configure({"disable_values_evaluation": True})
需要恢复时执行:
debugpy.configure({"disable_values_evaluation": False})
补充说明
你遇到的30秒耗时上限是debugpy内部的硬限制,无法通过环境变量修改,只能通过上述方案避免触发耗时的属性访问。
内容的提问来源于stack exchange,提问作者Daraan
相关产品推荐
相关产品推荐

