【问题标题】:Debugging WebAssembly with node使用节点调试 WebAssembly
【发布时间】:2019-05-06 20:44:04
【问题描述】:

可以通过node调试wasm模块吗?

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

我正在使用 nodejs v10.13。

【问题讨论】:

    标签: node.js debugging webassembly


    【解决方案1】:

    Firefox 开发者版(屏幕截图)和 Chrome 71 都支持 WebAssembly Source Maps。

    您忘记了包含源地图的路径。例如:

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

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

    【讨论】:

    • 我确实放了一个路径(虽然我没有在问题中明确提到它)但是我放了一个带有 file:// 的 url。我认为这是要走的路。谢谢,我再试一次。
    • @dim 是的,我的意思是你的源代码必须像你的 JS 文件一样通过 HTTP/S 传输。确保您的网络服务器可以访问您的源代码,并且您可以访问浏览器上的文件。
    • 问题是,我目前没有网络服务器。我直接在本地计算机上使用 node.js。所以任何 HTTP URL 都没有意义。当然,我可以为此设置一个小型网络服务器,但这会很烦人。
    【解决方案2】:

    所以,我设法得到了一些工作。我安装了:

    • 节点 v11.4
    • Chrome beta 71(由于this

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

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

    但是你不能从原始的 C 源文件调试,Chrome DevTools 只显示反编译的废品。这感觉像是调试的石器时代,但仍然可以调试。

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

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 2020-10-09
      • 1970-01-01
      • 2020-09-15
      • 2015-12-18
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多