腾讯亿级用户规模自研业务的上云实践解读,立即报名 了解详情
写点什么

现在可以借助 GDB 和 LLDB 在浏览器外调试 WebAssembly 源代码了

  • 2019-09-16
  • 本文字数:1162 字

    阅读完需:约 4 分钟

现在可以借助GDB和LLDB在浏览器外调试WebAssembly源代码了

Mozilla 最近展示了如何使用像GDBLLDB这样的标准调试器在浏览器之外调试WebAssembly二进制文件。在与生产环境相同的执行环境中调试 WebAssembly 代码,使开发人员可以捕获并诊断相同代码在本地构建时可能不会出现的 Bug。


WebAssembly 加上WASI使得在浏览器之外使用WebAssembly取得了长足的进步,并兑现了“编写一次,到处运行”的承诺。


虽然已经可以在浏览器之外运行 WebAssembly 程序了,特别是在wasmtime中,但调试过程还存在一些困难。虽然 WASI 允许开发人员使用控制台日志报告程序执行情况,但源代码无法调试。以编译成 WebAssembly 的Rust源代码为例,rustwasm 文档解释了这个问题:


调试器目前提供的实用工具有限,最终我们将单步调试编译器输出的原始 WebAssembly 指令,而不是我们编写的 Rust 源代码文本。


现在可以使用GDBLLDB等传统工具对.wasm 文件进行源码级调试了。


在最近发布的一段截屏视频中,Mozilla 演示了使用 LLDB 调试一个由 Rust 生成的 WebAssembly 程序,该程序实现了FizzBuzz问题的解决方案。这段视频首先展示了使用 cargo 将 Rust 代码编译成到 WebAssembly,并使用 wasmtime 运行生成的 wasm 代码。接下来,该视频使用 LLDB 调试信息来检测 wasm 代码:


lldb -- wasmtime  -g target/wasm32-wasi/debug/fizz.wasm
复制代码


这一步操作完成后,开发人员可以使用断点(例如 breakpoint set -name fizzbuzz)、源码级导航、在程序中断执行期间检查和修改变量、查看和浏览堆栈帧(stack frames),以及使用命令行界面或 LLDB 的图形用户界面执行其他典型的调试功能:



Mozilla 解释了源码级调试如何帮助 WebAssembly 开发人员捕获原本容易混淆的 Bug:


Wasmtime 的调试使开发人员更容易捕获和诊断相同代码在本地构建时可能不会出现的 Bug。例如,与传统的 Unix 风格的权限相比,WebAssembly系统接口(WASI)对待文件系统的访问更严格。这可能会导致只有在 WebAssembly 运行时中才会显现的问题。


LLVM项目是模块、可重用的编译器和工具链技术的集合。LLDB 项目以 LLVM 提供的库为基础构建,并提供了一个本地调试器。


GDB(GNU 项目调试器)是一个调试器,它支持以下语言:C++、Rust、Go、Objective-C、Ada、Assembly、C、D、Fortran、OpenCL、Modula-2 和 Pascal。


WASI (WebAssembly 系统接口)是一个正走在标准化道路上的、面向 WebAssembly 的模块化系统接口,它注重安全性和可移植性。WASI 旨在使开发人员能够在任何设备、计算机或操作系统上运行 WebAssembly 程序。


Wasmtime是一个独立的 JIT 风格的 WebAssembly 运行时。Wasmtime 运行时的教程中提供了如何使用CRust开发 WASI 应用的示例。生成的.wasm 模块可以在任何兼容 WASI 的运行时中运行,比如 Wasmtime 或Fastly的Lucet


原文链接:


WebAssembly Source Code Can Now Be Debugged Outside the Browser With GDB and LLDB


2019-09-16 09:002194
用户头像

发布了 534 篇内容, 共 244.4 次阅读, 收获喜欢 1279 次。

关注

评论

发布
暂无评论
发现更多内容

想要做音乐玩音乐,有这一个软件就够了!

懒得勤快

美国高通公司发布Snapdragon 700移动平台,为中高端终端提供优质功能

WorkPlus Lite

药以安为先,如何用技术升级助力药品质量升级?

WorkPlus Lite

IPFS挖矿靠谱吗?IPFS挖矿合法吗?

区块链 IPFS

SSC公链系统软件开发内容

技术干货 | 录屏采集实现教程——iOS端

ZEGO即构

大前端 音视频 RTC iOS端屏幕录制

详解智能优化算法:遗传算法和蚁群算法

华为云开发者联盟

算法 遗传算法 智能优化算法 蚁群算法

架构实战营模块七总结

竹林七贤

Grpc对象转proto代码工具

Spook

gRPC proto

容器化 | 基于 Kubernetes 的新一代 MySQL 高可用架构实现方案

RadonDB

MySQL Kubernetes 容器 RadonDB KubeSphere

WICC 2021 召开在即 服务开发者生态是大会主要亮点

融云 RongCloud

2种方法将YouTube视频转MP3音频

资源君

分享 教程 经验 youtube转mp3 格式转换

GTG天天播软件开发|GTG天天播APP系统开发

不愧是阿里内部“SpringCloudAlibaba学习笔记”上线7天就获22w 浏览量!

Java 程序员 架构 面试 微服务

什么?你们项目没用过主从复制和读写分离?

Flink+ 数据湖 Iceberg 的体验

Qunar技术沙龙

架构 运维 flink 消费 kafka 后端 flink sql 执行过程

开发者必看!你想知道的迁移之道都在这里了

华为云开发者联盟

数据库 DRS 数据迁移 GaussDB(for openGauss) 迁移工具

【LeetCode每日一题 Day 3】3. 无重复字符的最长子串

编程熊

程序员 面试 算法 LeetCode 笔试

货运飞船 3D 可视化监管,相隔万里都能得心应手?

一只数据鲸鱼

数据可视化 3D可视化 数字孪生 智慧航天 飞船

Bee Network蜂币系统APP开发简介

规则引擎-ice接入

waitmoon

规则引擎

智慧平安社区建设解决方案,昆明智能安防小区搭建

中国的区块链技术,究竟发展到哪里了?

CECBC

Cisco VPC peer-gateway 对直连BFD邻居建立的影响

Qunar技术沙龙

后端 Cisco BFD

苹果公司在WWDC会议前意外泄露了新的移动平台

WorkPlus Lite

真的香!Github一夜爆火被各大厂要求直接下架的面试题库也太全了

Java 程序员 面试 java编程

小蚂蚁CFT定制系统开发

OBC区块链社交软件系统开发内容

MNC小黄人系统开发|MNC小黄人软件APP开发

影响视界系统开发|影响视界软件APP开发

现在可以借助GDB和LLDB在浏览器外调试WebAssembly源代码了_前端_Bruno Couriol_InfoQ精选文章