VSCode无法直接attach到Maya或3ds Max的Python进程,因二者默认不支持debugpy/PTVSD attach模式;必须在脚本中显式调用import debugpy、debugpy.listen(5678)和debugpy.wait_for_client(),并配置launch.json为"request":"attach"、"host":"127.0.0.1"、"port":5678、"justMyCode":false。

VSCode 无法直接 attach 到 Maya 或 3ds Max 的 Python 解释器进程里 —— 这不是你配置错了,是底层限制决定的。 Maya 和 Max 的 Python 解释器(mayapy.exe / maxplus)不支持标准的 PTVSD/Debugpy attach 模式,除非你主动在脚本里启动调试服务,并让 VSCode 去连接它。否则所有“一键调试”类插件(如 MayaPort、SendToMaya)只负责发送代码执行,不支持断点、变量监视、调用栈等真调试能力。
为什么 debugpy.listen() 必须写进你的脚本里
Maya 和 Max 的 Python 环境默认不暴露调试端口。VSCode 的 Python 扩展只能 attach 到已监听指定端口(比如 5678)的 debugpy 进程。所以你得手动在脚本开头插入调试初始化逻辑:
-
import debugpy必须放在最前面,且确保debugpy已安装到 Maya/Max 的 Python 环境中(用mayapy -m pip install debugpy或对应解释器安装) -
debugpy.configure(python="D:/.../mayapy.exe")这行可选,但建议写上,避免 VSCode 找错解释器 -
debugpy.listen(5678)启动监听;如果端口被占,会抛异常,需加try/except包裹 -
debugpy.wait_for_client()是阻塞等待 VSCode 连接 —— 不加这句,脚本可能跑完就退出,VSCode 来不及 attach
示例片段(Maya):
import sys
import debugpy
<h1>只在第一次运行时启动监听(避免重复绑定)</h1><p>if not hasattr(sys, 'is_debugging') or not sys.is_debugging:
try:
debugpy.listen(5678)
print("Debugpy listening on port 5678...")
debugpy.wait_for_client()
sys.is_debugging = True
except Exception as e:
print(f"Debugpy failed: {e}")</p><h1>你的实际逻辑从这里开始</h1><p>import maya.cmds as cmds
cmds.polySphere(name='debugSphere')3ds Max 2021+ 才真正支持 debugpy,旧版只能打日志
Max 2018/2020 使用的是 Python 2.7 + ptvsd,而 ptvsd 已停止维护,与现代 VSCode 不兼容;Max 2021 起默认 Python 3.6+,才支持 debugpy。如果你还在用 Max 2020 或更早版本:
立即学习“Python免费学习笔记(深入)”;
- 不要尝试装
debugpy—— 它根本不会启动监听,也不会报错,只是静默失败 -
maxplus模块没有sys.stdout重定向能力,print()输出不会出现在 VSCode 终端,只能靠maxplus.utils.log()写到 Max 脚本编辑器 - 唯一可靠方式:在关键位置加
maxplus.utils.log("step A hit"),配合 Max 脚本编辑器实时查看
Max 2021+ 用户注意:debugpy 必须由 Max 主线程启动,不能放在 Qt 信号回调或定时器里 —— 否则会卡死或崩溃。
VSCode launch.json 配置必须用 attach,不能用 launch
你不是在 VSCode 里“运行”脚本,而是在 Maya/Max 里“执行”它,所以调试配置类型必须是 attach,不是 launch。常见错误包括:
- 误用
"request": "launch"—— 这会让 VSCode 自己起一个python xxx.py进程,跟 Maya 完全无关 -
"host"写成"localhost"而非"127.0.0.1"—— 某些 Windows 防火墙策略下,localhost解析失败导致连接超时 - 没关掉
"justMyCode": true—— Maya 内部模块出错时,你会卡在 C++ 层,看不到 Python 堆栈;设为false才能穿透到你自己的代码
正确配置节选(.vscode/launch.json):
{
"name": "Attach to Maya",
"type": "python",
"request": "attach",
"port": 5678,
"host": "127.0.0.1",
"justMyCode": false
}真正麻烦的从来不是配置本身,而是每次改完脚本都要手动在 Maya 里 reload —— importlib.reload() 在 Maya 里容易失效,尤其是模块有 C 扩展依赖时。这时候别硬 reload,重启 Maya 是最快验证方式。


















