flutter windows desktopのnative pluginデバッグ①
プロジェクトの準備
code:command prompt
$ flutter create --template=plugin --platform=windows test_plugin
※以降test_pluginとなっている部分は適宜自分のアプリケーション名で入れ替えて考えること
実行とデバッグ -> Dart & Flutter -> 起動構成の選択でFlutterを選択 -> F5
https://gyazo.com/faeb98f4b731cf92c7bde7003d4e7fbf
https://gyazo.com/b2b2925e117ad27ca77f147ac864eda9
https://gyazo.com/89f89f3248eae46a8cce323eec0f3fd7
https://gyazo.com/082770284f3cb674516c10e7b9f09b94
Visual Studio 2022でデバッグする方法
手順
examle/build/windowsに移動するとtest_plugin_example.slnが生成されているはず
それを開き、test_plugin_exampleをスタートアップに設定して実行
さっきと同じアプリが立ち上がり、ネイティブプラグイン側のデバッグが可能(ブレークポイントできちんと止まる)
https://gyazo.com/2605aec5c19fa3aa9167bfbcc5504588
感想
example/lib/main.dartに変更があると再実行する必要がある
(実行中にdartを変更しても何も起こらない)
dartを変更してもVisualStudioをリロードとかは出なかった
UIはVSCode, ランタイムはVisualStudioと分かれているのに慣れることができるか
むしろc++はVisual Studioで開発ができたほうがやりやすい?
VSCodeでUIの実行中にネイティブのコードデバッグがしたくなった場合、VisualStudioで開き直すのが面倒というデメリット
当たり前だがランタイムを変更後はVSCode側も再ビルドが必要
当然プラグイン側も再度F5する
flutter for windows、ビルドが遅いのがネック
CMakeList.txtをいい感じに変更すれば別の静的ライブラリのプロジェクトを追加可能?
ランタイムライブラリを動的ライブラリにする(dll)として、ランタイムのプロジェクトとランタイムの確認用のプロジェクト(.exe)を用意できたら、軽い確認はそっちで行うことが出来るので、重いエディタを開き直さなくてよくイテレーションが上がる?(最終確認などはエディタプロジェクトで開くことになるが)
この件は後ほど調べてみる
VSCodeで実行する方法
手順
ctrl -> shift + p "laun -> launc.jsonを開く -> "Dart & Flutter" -> .vscode/launch.jsonが生成https://gyazo.com/031281fec5d352541b73a9d0aa77b545
launch.jsonを以下のようにすると実行とデバッグ画面に"Debug Native"が出る
ここで指定しているmiDebuggerPathのgdb.exeについては後述(gdb.exeを持っている人は適宜自分のパスに追加すればいいはず)
code:launch.json
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
"version": "0.2.0",
"configurations": [
// 中略
{
"name": "example (profile mode)",
"cwd": "example",
"request": "launch",
"type": "dart",
"flutterMode": "profile"
},
{
"name": "Debug Native",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/example/build/windows/runner/Debug/test_plugin_example.exe",
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"miDebuggerPath": "C:/Program Files/mingw64/bin/gdb.exe"
}
]
}
実行するデバッグが可能
https://gyazo.com/164ee344115cb84352c0e86872a841df
感想
結局VSCodeでも一度dartのプロセスを閉じなければいけない
実行中のexeにアタッチする方法を試したい
できれば自動で
アプリケーションの立ち上がりがVisual Studio 2022でする方法より早い(なぜだろう)
なぜかというとCMakeのビルドをしないといけなかった
この時点ではビルド済みのexeをデバッグする設定になっている
Visual Studio2022を開く必要がないのはいいかも(UIもランタイムも同じエディタを使用できる)
CMakeList.txtをいい感じに追加したりすればプロジェクトを新しく追加するコストはVisualStudio2022と一緒 ?
gdb.exeを用意する
c++のデバッグのためにgdb.exeが必要らしい。これはC++のデバッガであるらしいのだがあまり詳しくないので詳細の説明は避けるが、自分でビルドする方法以外に、WindowsのC++開発環境であるところのMinGWに付属しているらしくまずはそれを使ってみたほうがいいとどこかで書いてあったので試したところうまくいった。MinGWはインストーラーでインストールする方法があるがなぜかインストーラーがエラーを吐くので自分で7zを解凍した
参考
解凍とセット手順
x86_64-posix-sehを選択
解凍->mingw64をProgramFilesに移動
C:/Program Files/mingw64/bin/gdb.exe が存在することを確認