我自己写的插件名称是: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