18 | 如何进行 Wasm 应用的调试与分析?
于航
你好,我是于航。
所有正在应用 Wasm 这门技术的开发者,都会被频繁问到这样一个问题 —— “如何能够以最正确的方式来对一个 Wasm 模块(应用)进行调试?”
实际上,针对 Wasm 模块的调试方案与相应的工具链,暂时还没有统一的“事实标准”。而又由于 Wasm 本身可以被应用在诸如 Web 与 out-of-web 等多种场景中,这便使得对 Wasm 模块或应用的调试过程,变得十分复杂。
在本节课里我将为你总结现阶段所能够使用的一些,针对于独立 Wasm 模块或者说 Wasm 应用的调试方案。这些方案本身并没有优劣之分,你可以根据自己的实际情况和应用场景来挑选合适的 Wasm 调试方式。
这些方案将会基于不同的工具实现来展开,而关于工具本身的安装过程,你可以参考我在这节课里给出的相关链接。
总的来说,我们可以将这些方案划分为 Web 与 out-of-web 两种场景。前者对应于运行在 Web 浏览器中的 Wasm 应用,这些应用仅使用到了 Wasm 核心标准中的特性;而后者则对应于运行在如 Wasmtime 等 Wasm 运行时中的 Wasm 应用,这部分应用还将会使用到除 Wasm 核心标准之外的 WASI 抽象操作系统接口标准。
编译时调试
作为开发 Wasm 应用的一个必不可少的流程,“编译”是一个无论如何也要跨过去的“槛”。但总是有着各种各样的原因,导致你的应用在编译阶段会出现问题。所以我们先来看看如何调试应用在编译期发生的错误。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Wasm 应用的调试与分析是开发者们关注的重要问题。本文总结了针对独立 Wasm 模块或应用的调试方案,包括编译时调试和运行时调试。在编译时,Emscripten提供了丰富的调试选项,如通过设置“EMCC_DEBUG”环境变量以及使用“-s [DEBUGGER_FLAG=VALUE]”来输出详细的调试信息以供排错。在运行时,通过为编译命令指定特殊的“调试参数”“-g”,可以在 Web 浏览器中进行“源码级”调试,包括设置断点、单步跟踪等。对于使用 Rust 语言编写的 Wasm 模块,可以通过为 rustc 添加“-g”参数的方式来加入调试信息。此外,Wasmtime提供了在 LLDB、GDB 等传统调试器中调试 Wasm 字节码的能力。虽然目前调试功能还不是十分完善,但在今年的 Chrome 2020 开发者峰会上,Chrome 团队推出了一款新的 Chrome 扩展,可以帮助增强浏览器上的 Wasm 应用调试体验。总的来说,本文提供了针对 Wasm 应用调试的实用方案,帮助开发者解决调试问题。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《WebAssembly 入门课》,新⼈⾸单¥29
《WebAssembly 入门课》,新⼈⾸单¥29
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- 慌慌张张老师我想问一下,对于开发时和线上环境,是不是要区分一下编译脚本。例如我们开发环境调试时候加上EMCC_DEBUG或者-g这样会加重编译后的体积吧,线上的话是不是要去掉这些,减小打包后体积,从网络传输效率来说应该会得到提高。
作者回复: 是的,这个可以在编译脚本中进行区分。
2020-11-041 - 奕wasm 的发展任重道远啊,但是未来可期
作者回复: 没错,是的:)
2020-10-141 - 军秋之前在浏览器控制台可以看到C代码并能打断点,但是看不到变量值,以为哪里弄的不对。原来是不支持啊。很期待调试的改进2020-10-151
收起评论