在浏览器之外调试 WebAssembly

WebAssembly 已经开始通过 Mozilla 的 Wasmtime 和 Fastly 的 Lucet 等专用运行时 在浏览器之外 建立自己。虽然对程序的新通用格式的承诺很有吸引力,但也带来了新的挑战。例如,如何调试 .wasm 二进制文件?

在 Mozilla,我们一直在尝试使用传统的工具(如 GDBLLDB)来实现对 .wasm 文件进行源代码级调试的方法。

以下 屏幕截图 展示了一个调试会话示例。具体而言,它演示了如何使用 Wasmtime 和 LLDB 检查最初用 Rust 编写,但编译成 WebAssembly 的程序。

这种类型的源代码级调试以前是不可能的。虽然实现细节可能会发生变化,但开发人员体验(将普通调试器附加到 Wasmtime)将保持不变。

通过允许开发人员在与生产 WebAssembly 程序相同的执行环境中检查程序,Wasmtime 的调试支持使得更容易捕获和诊断可能不会在相同代码的本机构建中出现的错误。例如,WebAssembly 系统接口 (WASI) 对文件系统访问的处理比传统的 Unix 风格权限更加严格。这可能会造成只在 WebAssembly 运行时出现的问题。

Mozilla 正在积极努力确保 WebAssembly 的开发工具能够胜任,功能完备,并随时准备随着 WebAssembly 超越浏览器而发展。

请尝试一下,并告诉我们您的想法。

注意:使用 Wasmtime 和 LLDB 进行调试应该在 Linux 上使用 Rust 程序或通过 WASI SDK 构建的 C/C++ 项目开箱即用。

在 macOS 上调试目前需要 构建和签名 一个更新版本的 LLDB。

不幸的是,Windows 的 LLDB 还不支持 JIT 调试.

感谢 Lin Clark、Till Schneidereit 和 Yury Delendik 对这篇文章的支持,以及他们在 WebAssembly 调试方面的工作。

关于 Dan Callahan

Mozilla 开发者关系工程师,前 Mozilla Persona 开发者。

更多 Dan Callahan 的文章……