VSCODE调试SketchUp2019自定义插件

2025-02-18·
XIETU
XIETU
· 7 分钟阅读时长 · 阅读量

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

三、    在VSCODE中安装扩展Ruby

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

Ruby

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

Ruby

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

Ruby

3.  下载Ruby扩展在本地安装。ruby github下载地址

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

  1. 在vscode中本地安装。
    Ruby

四、 编写tasks.json:

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

  1. 建立任务

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

task

使用模板创建tasks.json

task
Others
task
会自动在.vscode文件夹建立tasks.json文件
task
2. 在https://github.com/SketchUp/sketchup-ruby-api-tutorials/wiki/VSCode-Debugger-Setup 链接 复制代码然后粘贴过来
task
以下是代码,我只保留了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
调试器配置
以下是默认设置
调试器配置

  1. 在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 的副本(避免重复加载)。

  1. 原理: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 已经成功启动并且正在监听指定的调试端口。

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

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

调试

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

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

  1. 然后进行断点调试。 添加断点
    调试

在sketchup中打开插件

调试
调试
断点命中!!!
调试

在Sketchup中表现完美!很OK!

调试

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