Skip to content
| Marketplace
Sign in
Visual Studio Code>Debuggers>moondbg (Preview)New to Visual Studio Code? Get it now.
moondbg (Preview)

moondbg (Preview)

Preview

KaidaAmethyst

| (0) | Free
通过 moondbg 构建并调试 MoonBit native 程序。
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

moondbg for VS Code(技术预览)

通过 moondbg 与 lldb-dap 调试 MoonBit native 程序。支持自动构建、行断点、函数断点、 单步、暂停、调用栈、局部变量树、Watch、悬停、只读变量路径求值和程序输出。

支持环境

  • macOS Apple Silicon:aarch64-apple-darwin(VSIX 平台名 darwin-arm64)。 使用原生 ARM64 版 VS Code,不支持 Rosetta、Intel Mac、Windows 或 Linux。
  • MoonBit 支持基线:v0.10.4。当前实际开发验收使用 moonc v0.10.12+2583f1173-nightly;v0.10.4 专项验收尚待完成。
  • 需要可用的 lldb-dap。可在终端执行 xcrun --find lldb-dap 检查; 如果没有,应先安装/配置提供 lldb-dap 的 Xcode 工具链,再尝试调试。
  • 安装 MoonBit 的 VS Code 语言扩展,使 .mbt 文件的语言模式为 MoonBit。
  • 仅支持受信任的本地文件工作区。调试会编译并运行你的代码。

安装

当前源码的 publisher 已改为 KaidaAmethyst,扩展完整 ID 为 KaidaAmethyst.moondbg。 本地重新打包的 0.1.2 VSIX 可上传到该 Marketplace 发布者下;这不表示已完成 Marketplace 发布。 安装此新包前先卸载或禁用旧 moondbg-local.moondbg,不会自动从旧 ID 升级。 下面的 GitHub Release 及其资产仍保留旧 publisher,不包含这次身份迁移。

从 GitHub Release:vscode-v0.1.2 下载 moondbg-0.1.2-darwin-arm64.vsix。这是技术预览,尚未上架 Marketplace。

  1. 在终端使用你的 MoonBit 工具链安装 CLI:

    moon install Kaida-Amethyst/moondbg
    

    默认安装位置是 ~/.moon/bin/moondbg。此扩展不包含 CLI,也不会自动安装或更新它。 本版的 panic、条件断点和变量探查能力由 CLI 提供;Mooncakes 包可能落后于本 release。 要安装与本 release 匹配的 CLI,可在新的目录中执行:

    git clone --branch vscode-v0.1.2 --depth 1 https://github.com/Kaida-Amethyst/moondbg.git moondbg-preview
    cd moondbg-preview
    moon install --path .
    

    这会替换原来的 moondbg CLI,不会升级 MoonBit 工具链。

  2. 在普通 VS Code 窗口按 Cmd+Shift+P,执行 Extensions: Install from VSIX… / 扩展:从 VSIX 安装…, 选择 moondbg-0.1.2-darwin-arm64.vsix,如有提示则重新加载窗口。 不需要克隆 moondbg 仓库或打开扩展开发窗口。

  3. 打开用户设置(Cmd+,),搜索 moondbg.moonHome,填入 ~/.moon。 也可以通过 Preferences: Open User Settings (JSON) 添加:

    {
      "moondbg.moonHome": "~/.moon"
    }
    

    自定义工具链请填对应的绝对目录。该设置优先于环境变量;留空才使用 VS Code 进程的 MOON_HOME。 不会搜索 PATH 或自动尝试其他目录。扩展将所选目录传给 CLI,保证构建使用同一套工具链。

若之前装过 moondbg-dev、moondbg-local.moondbg 或启动了旧的 moondbg 扩展开发窗口, 使用新 publisher 的包前请先禁用旧扩展并关闭旧窗口,避免两个扩展同时注册 moondbg 调试类型。 当前源码打包的扩展标识是 KaidaAmethyst.moondbg。 更新时下载相应 release 的 VSIX 重新安装,并按其说明同步 CLI。

第一次调试

打开 MoonBit 项目文件夹,再打开可执行包中的 .mbt 源码,打断点并按 F5。 首次询问调试器时选择 moondbg;默认入口是 moondbg:调试当前包,不要求 launch.json。 也可以按 Cmd+Shift+P 执行 moondbg:调试当前包,不受项目已选中其他调试器配置的影响。

当前文件属于 library、测试文件、非 native 可执行包,或没有打开已保存的源码时,提示 未确定 main 函数位置,不会搜索或自动选择其他包。入口定位仅检查元数据,不执行用户程序, 可通过通知中的取消按钮停止。编译诊断显示在 Output / 输出面板的 moondbg 频道。

自动定位需要新版 CLI 的 --resolve-source 接口。旧 CLI 会提示升级,不会猜测 /main。 CLI 新版发布到 Mooncakes 后可再次执行 moon install Kaida-Amethyst/moondbg; 开发试用可以在 moondbg 仓库根目录执行 moon install --path .,安装当前源码版本。

已有明确 package / program 的配置仍按原目标运行。若想固定入口,可在 .vscode/launch.json 中添加:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "moondbg",
      "request": "launch",
      "name": "调试 MoonBit main",
      "package": "${workspaceFolder}/main",
      "internalConsoleOptions": "openOnSessionStart"
    }
  ]
}

package 是可执行包的目录。若 moon.pkg 就在项目根目录,改成 ${workspaceFolder}; 若在 src/main,则改成 ${workspaceFolder}/src/main。不能指向 library 包。

在 .mbt 文件的可执行语句旁打红点,按 F5。moondbg 会先检查项目并以 -g -O0 构建, 然后启动调试。程序停住后可查看变量和调用栈,使用工具栏继续、单步或暂停;红色方块结束会话。 修改源码后保存并开始新会话,程序会重新构建。构建失败不会运行旧二进制。

  • 函数断点:在断点面板添加 main、当前启动包的 foo 或 @alias.foo。 泛型函数匹配所有已生成实例;别名来自启动包的 moon.pkg。
  • Watch / 调试控制台:直接输入 point.x、arr[0].x,不要输入 REPL 的 p 或 b。
  • 预编译程序:可用 "program": "绝对路径/program.exe" 替换 package;两者只能选一个。 程序需带完整调试信息。此模式不重新构建,函数断点仅支持 main。

条件断点(需要本 release 对应的 CLI)

在源码行号左侧右键 → 添加条件断点 / Add Conditional Breakpoint,选“表达式”, 输入 i == 7。已有断点可右键编辑;清空表达式恢复无条件断点。 支持行断点的变量路径比较,例如 point.x > 5、arr[0] == 7、line.start.x < limit。 左右路径复用 Watch/print 的只读语法;支持 Int、UInt、Int64、UInt64 的六种比较, 以及 Bool 的 ==、!=(例如 ready == true)。路径之间必须同类型,不隐式混合转换。 整数常量按左侧类型检查范围,64 位整数不会转成 Double;暂不支持浮点、算术或函数调用。

示例:打开仓库 testdata/dwarf_probe/conditional/main.mbt,在第 4 行设置 i == 7, F5 后只在 i = 7 的那轮停止。条件变量读取失败会停住并明确报错。 run/continue 过滤 false 条件;单步保留 LLDB 原有停止,不额外自动继续。 此功能由 CLI 提供能力声明,更新 CLI 后重新启动调试即可,无需重新安装 VSIX。 当前尚不支持命中次数或 logpoint。

支持括号、&&、|| 和 !(condition),例如 i >= 3 && i < 8,采用短路求值。 函数断点也可右键 编辑条件;名称填 probe,条件单独填写,不要把 if 写进名称。 打开 conditional_functions/main.mbt,给函数 probe 设置上述条件,F5 后依次停在 i=3 到 7。 改为函数 identity、条件 value == 7 后,重启调试会先停在 Int 的 7,再停在 UInt64 的 7, 随后 Double 实例会明确报条件类型不支持并保留现场。一个泛型函数条目覆盖全部已生成实例, 每次只在实际命中的实例和 frame 中读取变量。试用时关闭其他断点。

路径示例:打开 testdata/dwarf_probe/conditional_paths/main.mbt,在第 32 行设置 scene.points[0].x == limit,F5 后 scene.point.x = 7。可改为 ready == true 或 wide == 9007199254740993,后一种只在 scene.point.x = 1 时命中。

MoonBit panic(需要本 release 对应的 CLI)

新版 moondbg CLI 在 运行和调试 → 断点 面板提供默认开启的 MoonBit panic。 无需设置源码断点,panic 时会停止并优先定位最近的项目源码 frame,支持变量、Watch 和完整调用栈。 此功能由 CLI 提供,已有扩展无需重新安装;旧版 CLI 不显示此开关。

取消勾选只关闭内部 panic 停点,不影响普通断点,也不关闭 LLDB 的 SIGABRT 停止行为。 只报告 panic,不推断 runtime 未提供的具体原因。变量不可用时如实报告;直接调试预编译 exe 缺少项目源码上下文时,会提示手动在调用栈选择 frame。

变量与有界摘要

String/Bytes 显示内容与长度,长内容可点击展开分段查看;Watch 支持 text[0:128]、 bytes[0:32],String 范围按 UTF-16 单元计数。tuple/当前 enum 构造器的载荷使用 .0、.1, 例如 pair.0、result.0.x;Watch、展开面板和调试控制台共用路径规则。

复合值预览最多 2 层、每层 4 个成员、合计 16 个值、160 个 Unicode 字符, 例如 Ok(Point { x: 3, y: 4 })。截断显示 …,不限制进一步主动展开;数组元素不自动递归展开。 不调用 Debug trait 或用户函数。内存读取失败、LLDB 报告不可用和找不到变量分别提示, 找不到变量时不直接断言超出作用域。继续运行后旧变量引用失效。

这些能力来自配套 CLI,不捆绑于 VSIX。优化表示的 Option 仍依赖未合入的编译器契约, 本版不宣称完整支持 Option。tuple/enum 位置成员内部的复合元素数组暂不能索引, 例如 values.nested.1[0];普通命名数组的 items[0].x 仍可使用。

已知限制与排错

  • 暂不支持程序参数、环境变量覆盖、交互式 stdin、attach、会话内 restart、命中次数、logpoint、 算术表达式、函数调用或赋值。再次 F5 开始新会话。
  • 按包启动需要整个项目 moon check 通过,其他包或测试的错误也可能阻止启动。
  • 找不到 moondbg:查看错误中的实际路径,检查 moondbg.moonHome,并用对应工具链执行安装。
  • 找不到 lldb-dap:检查 xcrun --find lldb-dap。如果使用其他已安装版本,可在启动 VS Code 的环境中设置 MOONDBG_LLDB_DAP 为其绝对路径;扩展不下载 LLDB。
  • 没有源码红点:检查当前文件的语言模式是否为 MoonBit、语言扩展是否已启用。
  • 单步行号、局部变量可见性依赖编译器 DWARF 与 LLDB。无法提供的值不等同于零或空数组。

反馈问题时请附上 VS Code、macOS、moon version --all、lldb-dap --version 的版本信息, 启动配置、错误输出和最小复现源码;请勿包含敏感环境变量。

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft