You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Blender中停止Debugpy服务器并断开调试器连接?

在Blender中终止Debugpy调试服务器的实现方案

Debugpy确实没有公开的disconnect或shutdownAPI,但可以通过操作其内部模块的对象来实现从Blender端关闭调试服务器并断开连接。以下是具体的实现方法:

核心思路

Debugpy的调试服务由内部的_server和_adapter模块管理,我们可以直接访问这些内部对象,关闭监听套接字并断开所有已连接的客户端,同时重置内部状态以支持后续重新启动。

实现步骤

1. 启动调试服务器时的基础逻辑

启动Debugpy服务无需额外修改核心代码,内部服务器对象会自动初始化:

import debugpy

# 启动调试服务器(示例绑定本地5678端口)
debugpy.listen(("localhost", 5678))

2. 编写Blender操作器实现关闭功能

创建Blender操作器,方便在UI中直接触发关闭操作:

import bpy
import debugpy

class STOP_DEBUG_SERVER_OT_operator(bpy.types.Operator):
    """停止Debugpy调试服务器"""
    bl_idname = "debug.stop_debug_server"
    bl_label = "Stop Debugpy Server"
    bl_options = {'REGISTER', 'UNDO'}

    def execute(self, context):
        try:
            # 获取内部调试服务器实例
            debug_server = debugpy._server.server
            if not debug_server:
                self.report({'WARNING'}, "Debugpy服务器未启动")
                return {'FINISHED'}

            # 关闭监听套接字,停止接受新连接
            debug_server.close()

            # 遍历并断开所有已连接的客户端
            for client in list(debug_server.clients.values()):
                client.close()

            # 重置Debugpy内部状态,确保后续可重新启动服务
            debugpy._server.server = None
            if hasattr(debugpy, "_adapter") and debugpy._adapter.adapter:
                debugpy._adapter.adapter.close()
                debugpy._adapter.adapter = None

            self.report({'INFO'}, "Debugpy服务器已成功关闭")
        except Exception as e:
            self.report({'ERROR'}, f"关闭服务器失败: {str(e)}")
        return {'FINISHED'}

# 注册操作器
def register():
    bpy.utils.register_class(STOP_DEBUG_SERVER_OT_operator)

def unregister():
    bpy.utils.unregister_class(STOP_DEBUG_SERVER_OT_operator)

if __name__ == "__main__":
    register()

3. 使用方式

  • 将上述代码添加到Blender脚本中运行,完成操作器注册。
  • 按下F3打开操作搜索框,输入Stop Debugpy Server并执行,即可关闭调试服务器。

注意事项

  • 此方案依赖Debugpy的内部未公开API(_server、_adapter),当前主流版本(1.6.x+)中稳定可用,但未来版本更新可能存在兼容性风险。
  • 如果启动调试时使用debugpy.wait_for_client()导致脚本阻塞,需确保触发关闭操作前客户端已完成连接,或通过线程异步启动监听逻辑。
  • 关闭服务器后,可直接再次调用debugpy.listen()重新启动调试服务,无需重启Blender。

内容的提问来源于stack exchange,提问作者SandPiper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:10:34