BT

InfoQ ホームページ ニュース WebAssemblyソースコードがGDB、LLDBを使ってブラウザ外でデバッグ可能に

WebAssemblyソースコードがGDB、LLDBを使ってブラウザ外でデバッグ可能に

ブックマーク

原文(投稿日:2019/09/07)へのリンク

Mozillaは先頃、GDBLLDBなど標準的なデバッガを使用して、ブラウザ外でWebAssemblyバイナリをデバッグするデモを行った。本番環境で使用されるのと同じ実行環境でWebAssemblyコードをデバッグすることで、同じコードのネイティブビルドでは発生しない可能性のあるバグを捕捉し、診断することができる。

WebAssemblyは、WASIと結合されたことによって、ブラウザ外での使用に向けて大きく前進し、"Write Once、Run Anywhere"の公約を実現した。

ブラウザ外でのWebAssemblyプログラムの実行はこれまでも可能だったが、特にwastimeの使用において、デバッグ方法に難しい部分があった。WASIによってconsoleロギングを使用したプログラムの実行レポートは可能になったが、元のソースをデバッグすることはできなかったのだ。rustwasmの資料では、RustソースをWebAssemblyにコンパイルする場合を例として、問題点が説明されている。

現在はデバッガの提供するユーティリティに制限があるため、最終的には、作成したRustのソーステキストではなく、コンパイラが生成した生のWebAssembly命令がステップ実行されます。

今回、GDBLLDBなどの従来のツールを使用した、.wasmファイルのソースレベルのデバッグが可能になった。

Mozillaが最近公開されたスクリーンキャストでは、FizzBuzz問題のソリューションを実装した、Rustから生成したWebAssemblyプログラムをLLDBでデバッグする様子が示されている。スクリーンキャストは、最初にcargoを含むRustコードをWebAssemblyにコンパイルし、wasmtimeを使用して生成されたwasmコードを実行する。続いて、LLDBを使用して、wasmコードにデバッグ情報を組み込んでいる。

lldb -- wasmtime  -g target/wasm32-wasi/debug/fizz.wasm

ここまで完了すれば、ブレークポイント(例えば"breakpoint set -name fizzbuzz")、ソースレベルのナビゲーション、プログラムの実行中断時の変数の検査と変更、スタックフレームの表示とナビゲートといった一般的なデバッグ機能を、LLDBのコマンドラインインターフェースまたはグラフィカルインターフェースで使用することができる。

Imgur

Mozillaは、ソースレベルのデバッグがWebAssemblyの開発者にどのように役立つかを説明している。

Wasmtimeのデバッグサポートにより、同じコードをネイティブビルドした場合には発生しない可能性のあるバグを簡単に捕捉し、診断することができます。例えば、WebAssemblyシステムインターフェイス(WASI)では、従来のUnixスタイルのアクセス許可よりも厳密にファイルシステムアクセスを扱っています。これが原因で、WebAssemblyランタイムでのみ現れる問題が発生する可能性があるのです。

LLVMプロジェクトは、モジュール式で再利用可能なコンパイラおよびツールチェーンテクノロジーのコレクションである。LLVMが提供するライブラリをベースに構築され、ネイティブデバッガを提供する。

GDB(GNU Projectデバッガー)は、C++、Rust、Go、Objective-C、Ada、Assembly、C、D、Fortran、OpenCL、Modula-2、Pascalといった言語をサポートするデバッガである。

WASI(WebAssembly System Interface)は、セキュリティと移植性を重視した WebAssembly用のモジュラーシステムインターフェイスである。標準パス上に位置し、任意のデバイス、コンピュータ、あるいはオペレーティングシステム上でWebAssemblyプログラムを実行可能にすることがその目標だ。

Wasmtimeは、WebAssemblyのスタンドアロンJITスタイルのランタイムである。Wasmtimeランタイムのチュートリアルには、CおよびRustからWASIをターゲットにする方法のが含まれる。結果生成される.wasmモジュールは、WasmtimeやFastly's LucetなどのWASI準拠のランタイムで実行できる。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT

あなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。

Eメールを変更すると確認のメールが配信されます。

会社名:
役職:
組織規模:
国:
都道府県:
新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。