6
0

More than 1 year has passed since last update.

ラストのまほう 第14話『デバッガーを整備する』

Last updated at Posted at 2022-12-13

プログラミングを学ぶ人は、まずデバッガーの使い方を覚えるのがいいと思います。デバッガーで一行づつ実行しながら変数の中身を確認していけばプログラムの動きがイメージしやすいからです。printfデバッグはだいたいどの環境でもできるのでその意味では楽なのですが、ソースレベルでバッグができるに越したことはありません。そういえばGLSLとかprintfデバッグすら無理なので一番つらかった……。

wasm::trace関数を使う

WASM-4でデバッグプリントを行うには、trace関数を呼び出します。Rustの場合はformat!マクロと組み合わせて

trace(format!("x: {}, y: {}", player.position.x, player.position.y));

みたいな感じにするといいようです。(C/C++のみ、フォーマットと出力を同時に行うtracef関数が使えます)

ちなみに、Rust標準の出力関数であるprintlnとかを呼ぼうとしたら、note: rust-lld: error: initial memory too small, 66848 bytes neededとか言われてビルドに失敗しました。よくわかりませんが、まあprintlnは使えないみたいです。

C/C++ DevTools Support (Rustをサポートしないとは言っていない)

それで開発を始めた当初はtraceですべてをしのいでいたのですが、さすがにソースレベルでバッグができないと辛くなってきました。WASM-4ではRustをWASMにコンパイルしてブラウザで読み込みますが、ChromeのDevtoolsを開いて適当に実行を中断すると、普通に生WASMが表示されます。もちろん私はWASMなんて読めるわけがありません。

というようなことをツイートしていたら、 YutakaAoki3 さんにソースレベルデバッグできるよと記事を教えてもらいました。

なんかこの記事見覚えあるなと思ったら、"in particular, for C and C++ apps." とあって いやC/C++って書いてあるし、これ探してるのと違うやつかな…… と思って冒頭だけ読んでスルーしたような記憶があります。半信半疑ですが、記事にしたがって C/C++ DevTools Support (DWARF) というのをインストールしてみます。

debug.png

み゛ょ゛っ゛……!?(衝撃) Chromeに拡張をインストールしただけなのに、RustのソースコードがDevtoolsに表示されてソースコードレベルでバッグができています。変数の中身も普通に覗けました。こんなに簡単にできるようになるなんてありがたや。これで寿命が10年は伸びましたね。というわけで、C/C++ DevTools Support (DWARF)という拡張をインストールしようね、というだけの回でした。

次回予告

次回からは少しプラットフォーマーっぽいプログラミングをしていきます。

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0