0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

QtでビルドしたWebAssemblyアプリをChromeでデバッグする

Last updated at Posted at 2021-08-05

はじめに

こちらの記事で構築した環境にデバッグの仕組みを追加していきます。

Google ChromeのDev Tools設定から、WebAssemblyアプリをステップトレースするためのQtプロジェクト設定、Qtソース内へのステップインの方法などを紹介します。

デバッグ環境のインストール

Google Chromeの設定

Google Chromeインストール

開発者向けのChromeをインストールします。

名称未設定4.png

C/C++ Dev Tools拡張機能のインストール

C/C++ Chrome DevTools拡張機能をインストールします。

名称未設定5.png

C/C++ DevToolsの設定

Chromeのアドレスバーに

chrome://extensions

このように入力して拡張機能ページを開きます。

名称未設定6.png
Chromeの設定ボタン(アドレスバー右側)を押し「その他のツール」→「デベロッパーツール」を選びます。
名称未設定6.png
Settingsアイコン(歯車マーク)をクリックします。
名称未設定7.png
ExperimentsページのWebAssembly Debugging: Enable DWARF supportにチェックを付けます。これでmapファイルを正しく読み込んでくれます。

Qt CreatorからのWebAssembly起動設定

Qtプロジェクトの設定

プロジェクトを新規作成します。
Screenshot from 2021-08-05 07-33-15.png
名称はHelloWebAssemblyとしました。
Screenshot from 2021-08-05 07-33-39.png
キットの選択では、Desktop版とWebAssembly版の両方を選んでおきます。
Screenshot from 2021-08-05 07-58-39.png
ビルドディレクトリは通常では

/home/username/Documents/qtproject/build-HelloWebAssembly-Desktop_Qt_5_15_5_GCC_64bit-Release

このようなパスになっていますが、最後の部分をプロジェクト名称だけにして

/home/username/Documents/qtproject/HelloWebAssembly

このように変更します。これがデバッグ時に効果を発揮します。
Screenshot from 2021-08-05 07-59-08.png
HelloWebAssemblyプロジェクトが生成されました。
Screenshot from 2021-08-05 07-42-31.png
画面左側の「プロジェクト」を選択し、Build&Run項目からWebAssemblyのRunページを開きます。
「実行」セクションのAddボタンを押して新しい「カスタム実行ファイル」を作ります。
Screenshot from 2021-08-05 07-40-54.png
カスタム実行の設定内容は以下の通り。
コマンドライン引数でのパスは各自のHelloWebAssemblyプロジェクトのパスに合わせてください。

Executable:      ~/emsdk/upstream/emscripten/emrun
コマンドライン引数: --browser chrome ~/Documents/qtproject/HelloWebAssembly/HelloWebAssembly.html
作業ディレクトリ:   %{buildDir}

Qt Creatorの画面左下から、WebAssemblyのカスタム実行ファイルを選択しておいて、ビルドメニューから「実行」します。
スクリーンショット 2021-08-05 8.14.04.png
Google Chromeが自動的に起動し、WebAssemblyアプリが実行されました。
Screenshot from 2021-08-05 07-43-05.png
Chrome右上の設定アイコンからの「その他のツール」→「デベロッパーツール」を選ぶとデバッガ画面が現れます(ショートカットShift+Ctrl+iでもOK)。
名称未設定7.png
Chrome画面は左から順番に:
・実行画面
・Page(実行に関連するファイル)
・ソースコード
・ブレークポイント/変数/コールスタック
などが並びます。ただし、この状態ではソースコードとして表示されているのはwasm形式またはVM形式のコードしかありません。
Screenshot from 2021-08-05 07-47-51.png

ビルドオプションの追加

Chromeでのデバッグ時にmapファイルを読み込んでプログラムソースファイルを表示できるようにしましょう。プロジェクトファイル(HelloWebAssembly.pro)を開き、末尾に以下を追記します。

QMAKE_WASM_SOURCE_MAP_BASE = http://localhost:6931/

Screenshot from 2021-08-05 07-50-12.png
リビルドして起動し、デバッガ画面を表示するとソースファイルが表示されます。
下図はMainWindow::MainWindowにブレークポイントを設定して、WebAssemblyアプリを再起動(Chromeページを再読み込み)した状態です。
MainWindow::MainWindowでブレークし、そこまでの Call Stackが表示されています。
Screenshot from 2021-08-05 07-46-38.png
さきほどビルドディレクトリをこのように設定しました。

/home/username/Documents/qtproject/HelloWebAssembly

localhost:6931はデフォルトでHelloWebAssembly.htmlのある位置を指していますので、デバッガは実行ファイルと同じディレクトリにあるソースファイルを読み込み、マッピングしてくれます。

Qtクラス内へのステップトレース

Qtクラスの中へステップインしていくとQtのソースがロードできないというメッセージが出ます。
スクリーンショット 2021-08-05 8.50.09.png

Could not load content for http://localhost:6931/opt/Qt/5.15.5/wasm_32/include/QtCore/qflags.h (HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE)

このケースでは/opt/Qt/5.15.5/wasm_32/配下のソースが見つからない事が原因ですので、localhost:6931/opt が /optを指すようにシンボリックリンクを作ってやります。

cd ~/Documents/qtproject/HelloWebAssembly  <--プロジェクトディレクトリに移動します
ln -s /opt opt

これでQtクラスの内部までステップインできるようになりました。
スクリーンショット 2021-08-05 9.01.09.png

ライブラリのソースが別のディレクトリにある場合や、ソースファイルと別の場所にビルドディレクトリを配置したい場合などにも、この要領で参照するソースの位置を設定することができます。

ブレークさせるマクロ

#include <emscripten.h>

EM_ASM({ debugger });  

参考サイトなど

0
4
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
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?