调试Go Wasm:如何将浏览器工具的错误关联到Go源代码?
Go Wasm 源码定位调试方案
目前Go官方Wasm编译链没有原生支持类似GopherJS的Source Map输出能力,但开发阶段有多种成熟方案可以实现调试、报错直接定位到原始Go代码的效果,和TS、GopherJS的调试体验接近:
- Chrome原生DWARF调试
Go默认编译Wasm时会携带DWARF调试信息,只要编译时不添加-s -w这类剥离符号的参数,用GOARCH=wasm GOOS=js go build命令生成的Wasm文件,就可以直接在Chrome 110及以上版本的开发者工具中使用:Sources面板可以直接加载展示原始Go源码,支持断点设置、变量查看、调用栈定位,报错信息也会直接关联到Go源码对应行,和Source Map的使用体验基本一致。 - 日志埋点轻量定位
如果觉得带DWARF信息的Wasm体积过大、加载速度慢,可以借助Go标准库的runtime包获取代码执行位置,在日志中自动拼接文件名、行号信息,轻量实现报错位置快速定位,足够覆盖大多数日常开发排查场景。 - TinyGo编译链Source Map支持
第三方Go编译器TinyGo对Wasm场景做了大量优化,除了支持DWARF调试之外,还原生支持输出Wasm对应的Source Map文件,生成的Source Map可以在所有兼容Wasm Source Map的浏览器中使用,不需要依赖Chrome的DWARF调试能力,更适配多浏览器调试场景。
注意:生产环境编译Wasm时建议添加
-s -w参数剥离调试信息,可以大幅减小Wasm文件体积,提升页面加载性能。
内容的提问来源于stack exchange,提问作者Serge Hulne
相关产品推荐
相关产品推荐

