使用节点调试 WebAssembly

Debugging WebAssembly with node

是否可以通过节点调试 wasm 模块?

我正在使用 vscode 并使用 emcc -g4 --source-map-base 进行编译。在 C 源文件中放置断点是无效的。尝试使用 node inspectnode --inspect 到 Chrome 进行调试也不允许我使用断点,尽管可以从 Chrome 中的常规网页调试 wasm 模块。

我正在使用 nodejs v10.13。

所以,我设法让一些东西起作用了。我安装了:

  • 节点 v11.4
  • Chrome 测试版 71(因为

并使用 node --inspect 启动节点进程,以附加 Chrome DevTools。

此外,在我的代码中,我不是一次完成 WebAssembly.instantiate(直接提供位码),而是分两步完成:首先 WebAssembly.compile,然后 WebAssembly.instantiate .一旦 compile 被执行,DevTools 中就会提供一些“wasm”源代码。这是 wast 文本形式的 WebAssembly,其中可以在 instantiate.

执行之前设置断点

但是您不能从原始的 C 源文件进行调试,ChromeDevTools 仅显示反编译后的文件。这感觉像是调试的石器时代,但还是可以调试的。

2020 年编辑:这篇文章 https://developers.google.com/web/updates/2019/12/webassembly 似乎表明您现在应该能够从原始 C 源文件在 devtools 中进行调试。不过我没试过。

Firefox Developer Edition(屏幕截图)和 Chrome 71.

都支持 WebAssembly Source Maps

您忘记的是,包含源映射的路径。例如:

emcc -g4 --source-map-base http://localhost:8000/

使用此选项,每个源文件路径都带有前缀 http://localhost:8000/。所以用你的源目录替换它。