WebAssembly 入门课
于航
PayPal 高级软件工程师
10751 人已学习
新⼈⾸单¥29
登录后,你可以任选4讲全文学习
课程目录
已完结/共 23 讲
结束语 (1讲)
WebAssembly 入门课
15
15
1.0x
00:00/00:00
登录|注册

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
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • 慌慌张张
    老师我想问一下,对于开发时和线上环境,是不是要区分一下编译脚本。例如我们开发环境调试时候加上EMCC_DEBUG或者-g这样会加重编译后的体积吧,线上的话是不是要去掉这些,减小打包后体积,从网络传输效率来说应该会得到提高。

    作者回复: 是的,这个可以在编译脚本中进行区分。

    2020-11-04
    1
  • wasm 的发展任重道远啊,但是未来可期

    作者回复: 没错,是的:)

    2020-10-14
    1
  • 军秋
    之前在浏览器控制台可以看到C代码并能打断点,但是看不到变量值,以为哪里弄的不对。原来是不支持啊。很期待调试的改进
    2020-10-15
    1
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部