VSCODE调试SketchUp2019自定义插件
XIETU星球
编辑于 2025年08月14日 10:26
收录于文集
共1篇
AI跨界学

我自己写的插件名称是:sine_points.rb

一、    下载SketchUp 2019版本的预构建动态库SURubyDebugger.dll,它允许开发者对SketchUp的Ruby脚本进行调试。可以在编写插件或自定义脚本时设置断点、逐步执行代码、检查变量值以及评估表达式等。

下载地址:https://github.com/SketchUp/sketchup-ruby-debugger/releases

 选择自己版本的动态库,我用的是sketchup2019的。放在SketchUp 2019根目录如:C:\Program Files\SketchUp\SketchUp 2019

二、    下载VSCODE编译器,可在官网下载,不用注册。

下载地址:https://visualstudio.microsoft.com/zh-hans/#vscode-section

改为中文界面,CTRL+SHIFT+P打开命令面板,输入Language,选择Configure Display Language,然后选择中文。

三、    在VSCODE中安装扩展Ruby

1.  点击左侧活动栏中的扩展图标(四个小方块组成的图标),或者使用快捷键 Ctrl+Shift+X(Windows/Linux)打开扩展市场。输入Ruby查找。

2.  打开后会提示已经弃用,并推荐使用Ruby Lsp扩展,但是!不要安装Ruby Lsp,会造成之后编写的调试器配置文件Launch.json不能用。

下面是安装了Ruby Lsp的下场(都提示:不允许属性),为这个问题我折腾了两天。

3.  下载Ruby扩展。

下载地址:https://github.com/rubyide/vscode-ruby

跳到:https://github.com/rubyide/vscode-ruby/releases

4.  在vscode中本地安装

四、    编写tasks.json:用于定义和配置任务(Tasks)的文件。它位于工作区的 .vscode 文件夹内,允许开发者自定义一系列命令或脚本,这些命令或脚本可以在开发过程中自动化执行,如编译代码、运行测试、打包项目等。

1.  建立任务

菜单栏——配置默认生成任务

使用模板创建tasks.json

Others

会自动在.vscode文件夹建立tasks.json文件

2.  在https://github.com/SketchUp/sketchup-ruby-api-tutorials/wiki/VSCode-Debugger-Setup复制代码然后粘贴过来

以下是代码,我只保留了windows上运行的命令,并修改了终端命令("&'C:/Program Files/SketchUp/SketchUp 2019/SketchUp.exe' -rdebug 'ide port=6123 wait'")及端口号(port)。AI建议我添加一些其他命令,然后进行了含义注释。

 

{

   "version": "2.0.0",

   "tasks": [

       {

           // 给这个任务起一个名字,这个名字会在 VSCode 中显示,并用于引用此任务。

           "label": "Start SketchUp with Debugging",

           // 指定任务类型为 shell,意味着这个任务将在 shell 环境中执行。

           "type": "shell",

           // Windows 特定的配置。这里启动的是 SketchUp 2019 的 exe 文件,并通过 -rdebug 参数附加调试服务器的启动参数。'ide port=6123 wait' 表示 SketchUp 将启动 Ruby 调试服务器监听在 6123 端口上,并等待调试器连接。

           "windows": {

               "command": "&'C:/Program Files/SketchUp/SketchUp 2019/SketchUp.exe' -rdebug 'ide port=6123 wait'"

           },

           // 定义任务分组信息。

           "group": {

               // 标识该任务属于 build 类型的任务组。

               "kind": "build",

               // 标识这个任务为默认的 build 任务。设置为 true 后,可以通过快捷键 Ctrl+Shift+B 直接运行这个任务。

               "isDefault": true

           },

           // 配置问题匹配器,用于捕获编译器输出中的错误和警告。这里为空数组表示没有使用问题匹配器。

           "problemMatcher": [],

           // 提供关于任务的额外细节描述,仅用于显示目的。

           "detail": "启动 SketchUp 并等待调试器连接"

       }

   ]

}

五、    建立文件Launch.json:用于配置调试器行为的文件。它定义了如何启动调试会话,包括调试类型、启动模式(例如,直接运行程序还是附加到正在运行的进程)、环境变量、工作目录等设置。

1.  建立调试器配置文件

选择Ruby调试器

选择Listen for rdebug-ide

以下是默认设置

2.  在https://github.com/SketchUp/sketchup-ruby-api-tutorials/wiki/VSCode-Debugger-Setup复制代码然后粘贴过来

这里是代码,我修改了端口号(port)。用AI进行了含义注释。

 {

   "version": "0.2.0",

   "configurations": [

       {

           // 给这个调试配置起的名字,这个名字会在 VSCode 的调试启动菜单中显示,并用于选择具体的调试配置。

           "name": "Listen for rdebug-ide",

           // 指定调试器类型为 Ruby。这告诉 VSCode 使用适用于 Ruby 的调试器扩展来处理此调试会话。

           "type": "Ruby",

           // 指定请求类型为 attach。这意味着 VSCode 将尝试连接到一个已经运行的进程(在这个案例中是通过 rdebug-ide 启动的 SketchUp 或其他 Ruby 应用程序)。

           "request": "attach",

           // 设置工作目录(Current Working Directory)。${workspaceRoot} 是一个变量,代表打开的项目文件夹的根目录。

           "cwd": "${workspaceRoot}",

           // 远程主机地址。这里设置为 127.0.0.1 表示本地机器。

           "remoteHost": "127.0.0.1",

           // 远程端口号。需要与你在启动 Ruby 应用程序时指定的监听端口相匹配。此处设置为 6123。

           "remotePort": "6123",

           // 远程工作空间根目录。通常与 cwd 相同,特别是在本地调试的情况下。它指定了在远程机器上的相对路径如何映射到本地机器上的路径。

           "remoteWorkspaceRoot": "${workspaceRoot}"

       }

   ]

}

六、    现在还需要解决一个问题是,需要确保代码文件在VSCode的工作区中,并且SketchUp加载的是同一份文件。而我的SketchUp加载的脚本文件路径与VSCode工作区中的文件路径不一致(sine_points.rb文件在F:\MySketchUpPlugin,而sketchup插件路径在C:\Users\Administrator\AppData\Roaming\SketchUp\SketchUp 2019\SketchUp\Plugins)。 

1.  通过询问AI,建议动态加载开发目录(免文件操作):通过Ruby代码动态添加你的开发目录到SketchUp的加载路径。 

2.  操作步骤:

1)  在SketchUp插件目录中创建 dev_loader.rb 文件,代码如下:

# 文件位置:C:\Users\...\Plugins\dev_loader.rb

dev_path = "F:/MySketchUpPlugin" # 改为VSCODE项目的实际路径

# 添加开发目录到加载路径

$LOAD_PATH.unshift(dev_path) unless $LOAD_PATH.include?(dev_path)

# 自动加载主插件文件

require File.join(dev_path, 'sine_points.rb')  # sine_points.rb是你要编译的插件名

puts "开发模式已激活:从 #{dev_path} 动态加载插件" #​将指定的内容输出到控制台(标准输出)

2)  删除原有插件文件:确保插件目录中没有 sine_points.rb 的副本(避免重复加载)。

 3.  原理:SketchUp启动时会自动加载 Plugins 目录下的所有 .rb 文件。dev_loader.rb 会将你的开发目录添加到Ruby的搜索路径,并主动加载指定文件。

七、    测试

1.  首先加载tasks.json,打开skechup并监听端口6123。快捷键CTRL+SHIFT+B

此时sketchup看着像是死机了(因为再tasks.json中,终端命令添加了wait参数),实际是在等待vscode连接端口,我们可以查看一下端口的状态。

首先打开windows终端,WIN+R,输入CMD,然后CTRL+SHIFT+ENTER。输入

netstat -an | find "6123"回车查看返回信息。

这表明有一个服务正在监听所有网络接口上的 6123 端口(0.0.0.0:6123 表示该端口对所有 IP 地址开放)。这意味着 SketchUp 已经成功启动并且正在监听指定的调试端口。

 2.  接下来,在 VSCode 中打开调试器。CTRL+SHIFT+D,选择"Listen for rdebug-ide"

可以看到sketchup已经恢复并打开,自定义插件已经加载。

再查看一下端口情况,终端输入netstat -an | find "6123"

这表明 SketchUp 正在监听所有网络接口上的 6123 端口 (0.0.0.0:6123),并且有一个连接已经建立 (ESTABLISHED)。这意味着 SketchUp 的调试服务正在运行,这两个连接是从不同的方向描述了同一个 TCP 连接。

 3.  然后进行断点调试。

添加断点

在sketchup中打开插件

断点命中!!!

在Sketchup中表现完美!很OK!

八、    最后尽情的开发自己的插件吧,感慨的是:AI现在真是超级方便的工具,开拓了个人的创造潜力!!!

欢迎访问我的博客:

纯技术分享:https://xietu.pages.dev/

数字商店:https://ko-fi.com/xietu