VSCODE调试SketchUp2019自定义插件


我自己写的插件名称是:sine_points.rb
操作步骤
一、 下载SketchUp 2019版本的预构建动态库 SURubyDebugger.dll
它允许开发者对SketchUp的Ruby脚本进行调试。可以在编写插件或自定义脚本时设置断点、逐步执行代码、检查变量值以及评估表达式等。 github 下载地址
选择自己版本的动态库,我用的是sketchup2019的。放在SketchUp 2019根目录如:C:\Program Files\SketchUp\SketchUp 2019
二、 下载VSCODE编译器
VSCODE 官网下载地址,安装后改为中文界面,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扩展在本地安装。ruby github下载地址
- 在vscode中本地安装。
四、 编写tasks.json:
用于定义和配置任务(Tasks)的文件。它位于工作区的 .vscode 文件夹内,允许开发者自定义一系列命令或脚本,这些命令或脚本可以在开发过程中自动化执行,如编译代码、运行测试、打包项目等。
- 建立任务
菜单栏——配置默认生成任务
使用模板创建tasks.json
{
"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:
用于配置调试器行为的文件。它定义了如何启动调试会话,包括调试类型、启动模式(例如,直接运行程序还是附加到正在运行的进程)、环境变量、工作目录等设置。
- 建立调试器配置文件
选择Ruby调试器
- 在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)。
- 通过询问AI,建议动态加载开发目录(免文件操作):通过Ruby代码动态添加你的开发目录到SketchUp的加载路径。
- 操作步骤: 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 的副本(避免重复加载)。
- 原理:SketchUp启动时会自动加载 Plugins 目录下的所有 .rb 文件。dev_loader.rb 会将你的开发目录添加到Ruby的搜索路径,并主动加载指定文件。
七、 测试
- 首先加载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 已经成功启动并且正在监听指定的调试端口。
- 接下来,在 VSCode 中打开调试器。CTRL+SHIFT+D,选择"Listen for rdebug-ide”
可以看到sketchup已经恢复并打开,自定义插件已经加载。
再查看一下端口情况,终端输入netstat -an | find “6123”
- 然后进行断点调试。
添加断点
在sketchup中打开插件
在Sketchup中表现完美!很OK!
八、 最后尽情的开发自己的插件吧,感慨的是:AI现在真是超级方便的工具,开拓了个人的创造潜力!!!
