デバッグ¶
2.0 で追加。動いているアプリを止めて中を見る方法が 2 つあります。実機のエディタに内蔵された デバッガと、パソコンから TCP か BLE でつなぐ遠隔デバッガです。
どちらも実機でも シミュレータ でも使えます。
実機だけで: エディタ内蔵のデバッガ¶
エディタ (デスクトップで E) だけで、パソコンを使わずにデバッグできます。
実行¶
F5 で、編集中のファイルをそのまま実行します。保存して起動し直す手間はありません。
対象に接続する¶
Debug → Attach... で動いているアプリの一覧が出ます。選ぶとエディタが分割され、 本文の下に呼び出し履歴と変数の欄が出ます。
接続すると本文の左に停止点の欄が出ます。
| キー | 動作 |
|---|---|
F5 |
再開 |
F6 |
一時停止 |
F10 |
次の行へ (中に入らない) |
F11 |
中に入る |
Shift + F11 |
呼び出し元へ戻る |
F7 / F8 |
呼び出し履歴を上下に移動 |
F4 |
呼び出し履歴の欄と変数の欄を切り替え |
Debug メニューにも同じ操作があり、加えて現在行に停止点を置く Toggle BP と、 終了する Detach があります。
停止点は左の欄に赤い丸で表示され、止まっている行は強調表示されます。
デバッガは同時に 1 つだけ
1 台につきデバッグの接続は 1 つです。エディタが接続していると遠隔デバッガは接続できず、 逆も同じです。切り替えるときは先に切断してください。
パソコンから: 遠隔デバッガ¶
実機ではデバッグ用のサービスが動いていて、msgpack の手順で次のどちらかの経路を使います。
| 経路 | 対象 |
|---|---|
| TCP | Linux のシミュレータと、ネットワークで届く対象 |
| BLE | ESP32 の実機。GATT 経由なのでケーブルが要りません |
デバッグ用のサービスに認証はありません
どちらの経路も、接続してきた相手を確認しません。TCP はすべての接続元を受け付け、 BLE はペアリングも暗号化も行いません。実機に届く人なら誰でも、動いているアプリに 接続して変数の中身を読み、アプリを止めたり起動したりできます。信頼できる環境で 使ってください。セキュリティ も参照してください。
コマンドから使う¶
リポジトリの tool/debug/fmrb_dbg_client.py は、ライブラリでもあり、対話的に使える
小さな道具でもあります。
# 1 つのコマンドだけ実行する
python3 tool/debug/fmrb_dbg_client.py localhost:5555 stack_trace
# 対話的に使う
python3 tool/debug/fmrb_dbg_client.py localhost:5555
# BLE で、見つかった 1 台につなぐ
python3 tool/debug/fmrb_dbg_client.py ble
対象の指定は、TCP なら host[:port] (既定の port は 5555)、BLE なら ble、複数台ある
場合は ble:<名前かアドレス> です。
msgpack パッケージが必要です。BLE を使う場合は bleak も要ります。
DAP に対応した編集環境から¶
tool/debug/fmrb_dap_adapter.py は、同じ仕組みに Debug Adapter Protocol の入口を
つけたものです。DAP に対応した編集環境 (VS Code など) から、動いている実機に対して
停止点を置き、1 行ずつ進め、変数を見られます。
web コンソールのデバッグ欄¶
ブラウザから BLE でつなぐ web コンソール には、大まかな操作の
ための欄があります。動いているアプリの一覧 (ps)、終了、起動ができます。おかしくなった
アプリを落とすだけなら、デバッガを持ち出すよりこちらが速いです。
システムが自分について出しているもの¶
停止点を置かないと分からない問題ばかりではありません。システムは自分の状態を定期的に 出していて、たいていはその数値のほうが早く原因にたどり着きます。
- システムメニューの Log Viewer で実機のログが読めます
- 定期的な出力に、各タスクのスタックの残り、VM の領域の使用量、描画の所要時間が出ます
- システムメニューの Monitor で、動いているタスクとメモリが一目で分かります
メモリが足りなくなるアプリなら、どの領域がどこまで詰まっているかはこの出力にしか 出ません。デバッガでは分かりません。