パートナー アプリケーションをデバッグする
デバイスが USB で PC に接続されていることを確認します。 [スタートアップ項目の設定] メニューで、[Azure Sphere App (すべてのコア)] を選択します。ここで、Azure Sphere App は最上位のプロジェクトの名前であるか、F5 キーを押します。
プロジェクトのビルドを求めるメッセージが表示されたら、[ はい] を選択します。 Visual Studio は、パートナー アプリケーションをコンパイルし、イメージ パッケージを作成し、ボードに サイドロード して、デバッグ モードで起動します。 サイドローディング とは、アプリケーションがクラウド経由で配信されるのではなく、有線接続を介して PC から直接配信されることを意味します。
[出力>の表示>] [出力の表示元: ビルド出力] のパスに注意してください。これは、PC 上の出力イメージ パッケージの場所を示します。 デプロイを作成する準備ができたら、イメージ パッケージへのパスを把握する必要があります。
既定では、[ 出力 ] ウィンドウにデバイス出力からの出力 が表示されます。 デバッガーからメッセージを表示するには、[出力の表示元] ドロップダウン メニューから [デバッグ] を選択します。 また、プログラムの逆アセンブリ、レジスタ、またはメモリを [デバッグ>] Windows メニューから調べることもできます。
2 つの RTApp がある場合は、両方が 最上位のlaunch.vs.json ファイルにパートナー アプリとして一覧表示されていることを確認します。
Visual Studio デバッガーを使用して、ブレークポイントの設定、一時停止、ステップ オーバー、ステップ イン、再起動、またはアプリケーションの停止を行います。
C ソース コードのブレークポイントで停止している間、現在のアドレス、現在のコマンドのアセンブラーニーモニック、関連するレジスタや実行中のソース コード コマンドなどの情報を表示する 逆アセンブル ウィンドウ を開くことができます。
[逆アセンブリ] ウィンドウを開くには:
- Visual Studio でブレークポイントを含む C コード ソース ファイルが開かれていることを確認します。
- [Windows>逆アセンブリのデバッグ]> を選択するか、Alt キーを押しながら 8 キーを押します。
パートナー アプリケーションを含むフォルダーを開きます。 Visual Studio Code は、ワークスペース ファイルを検出し、ワークスペースを開くかどうかを確認します。 [ワークスペースを開く] を選択して、リアルタイム アプリケーションと高レベル アプリケーションの両方を一度に開きます。
2 つの CMakeLists.txt ファイルのいずれかを右クリックし、[ Build All Projects]\(すべてのプロジェクトのビルド\) を選択します。
Visual Studio Code アクティビティ バーの [実行] アイコンをクリックします。
画面の左側のウィンドウの上部に表示されるプルダウン メニューで、[ Azure Sphere Apps (gdb)(ワークスペース) の起動] を選択します。
F5 キーを押してプロジェクトをビルドしてデバッグします。 プロジェクトが以前にビルドされていない場合、またはファイルが変更され、再構築が必要な場合、Visual Studio Code はデバッグを開始する前にプロジェクトをビルドします。
Visual Studio Code がアプリケーションをビルドし、イメージ パッケージを作成し、ボードにデプロイし、デバッグ モードで起動するまで数秒待ちます。 途中で [ 出力 ] ウィンドウに状態の更新が表示されます。
まず、CMake は、アプリケーションをビルドする必要があるかどうかを判断します。 その場合は、フォーカスが出力ウィンドウに移動し、CMake/Build からの出力が表示されます。
次に、イメージ パッケージをデバイスにデプロイすると、出力ウィンドウに出力が表示されます。 最後に、デバッグ コンソールはフォーカスを受け取り、gdb 出力を表示します。
Visual Studio Code デバッガーを使用して、ブレークポイントの設定、一時停止、ステップ オーバー、ステップ イン、再起動、またはアプリケーションの停止を行います。
C ソース コードのブレークポイントで停止しながら、現在のアドレス、生の 16 進データ、現在のコマンドのアセンブラーニーモニック、関連するレジスタや実行されているソース コード コマンドなどの情報を示す逆アセンブル ビューを開くことができます。
逆アセンブル ビューを開くには:
- ブレークポイントを含む C コード ソース ファイルが Visual Studio Code エディターで開かれていることを確認します。
- エディター ウィンドウで右クリックし、[逆アセンブリ ビューを開く] を選択するか、[コマンド パレット>の表示>] [逆アセンブリ ビューを開く] を選択します。
リアルタイム対応アプリケーションが実行されている場合は停止します。
az sphere device app stop --component-id <component id>
デバッグを使用してリアルタイム対応アプリケーションを再開します。
az sphere device app start --component-id <component id>
このコマンドは、アプリケーションが実行されているコアを返します。
<component id> App state : running Core : Real time 0
アプリケーションがビルドされた sysroot の Openocd フォルダーに移動します。 sysroots は、Azure Sphere SDK のインストール フォルダーにインストールされます。 たとえば、Windows では、フォルダーは既定で Linux の と
/opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux
でC:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd
インストールされます。次の例に示すようにを実行
openocd
します。 この例では、アプリがコア 0 で実行されていることを前提としています。 アプリがコア 1 で実行されている場合は、"targets io0" を "targets io1" に置き換えます。PowerShell、Windows コマンド プロンプト、または Linux コマンド シェルを使用して、コマンド ライン インターフェイスを開きます。
リアルタイム対応アプリケーション .out ファイルを含むフォルダーに移動し、GNU Arm Embedded Toolchain の一部である start
arm-none-eabi-gdb
に移動します。Windows コマンド プロンプト
"C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" IntercoreComms_RTApp_MT3620_BareMetal.out
Windows PowerShell
& "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" IntercoreComms_RTApp_MT3620_BareMetal.out
OpenOCD サーバーは、:4444 で GDB サーバー インターフェイスを提供します。 デバッグのターゲットを設定します。
target remote :4444
これで、gdb コマンドを実行できるようになりました。 関数 HandleSendTimerDeferred にブレークポイントを追加します。
break HandleSendTimerDeferred
接続されたターミナル エミュレーターは、リアルタイム対応アプリケーションからの出力を表示する必要があります。
新しい Azure Sphere コマンド プロンプト (Windows) またはターミナル ウィンドウ (Linux) を開きます。
高度なアプリケーション .imagepackage ファイルを含むフォルダーに移動します。
アプリケーションが実行されている場合は、アプリケーションを停止し、デバッグを使用して再起動します。
az sphere device app stop --component-id <ComponentId>
az sphere device app start --debug-mode --component-id <ComponentId>
ターミナル エミュレーターを開き、ポート 2342 で 192.168.35.2 への Telnet または TCP 接続を確立して、上位レベルのアプリの出力を表示します。
次のコマンドを使用して gdb を起動します。
Windows コマンド プロンプト
"C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\gcc\arm-poky-linux-musleabi-gdb.exe" IntercoreComms_HighLevelApp.out
Windows PowerShell
& "C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\gcc\arm-poky-linux-musleabi-gdb.exe" IntercoreComms_HighLevelApp.out
メモ
Azure Sphere SDK には複数の sysroot が付属しているため、「アプリケーション ランタイム バージョン、sysroots、Beta API」で説明されているように、アプリケーションが異なる API セットをターゲットにすることができます。 sysroots は、 Sysroots の Azure Sphere SDK インストール フォルダーにインストールされます。
リモート デバッグ ターゲットを、ポート 2345 の IP アドレス 192.168.35.2 に設定します。
target remote 192.168.35.2:2345
関数 SendMessageToRTApp にブレークポイントを追加します。
break SendMessageToRTApp
「」と入力
c
して続行し、Telnet/TCP ターミナルの出力を確認してから、リアルタイム アプリケーション デバッグ セッションを含むコマンド プロンプトまたはターミナル ウィンドウに切り替えます。「」と入力
c
して続行し、接続されたシリアル セッションの出力を確認します。
デバッグ セッション間でやり取りし、リアルタイム対応アプリケーションと高レベル アプリケーションを切り替えることができます。 次のような出力が 2 つの出力ウィンドウに表示されます。
Starting debugger....
Process /mnt/apps/25025d2c-66da-4448-bae1-ac26fcdd3627/bin/app created; pid = 40
Listening on port 2345
Remote debugging from host 192.168.35.1, port 56522
High-level intercore comms application
Sends data to, and receives data from a real-time capable application.
Sending: hl-app-to-rt-app-00
Sending: hl-app-to-rt-app-01
IntercoreComms_RTApp_MT3620_BareMetal
App built on: Nov 17 2020, 09:25:19
Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627
Message size: 19 bytes:
Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:30
Text: hl-app-to-rt-app-00
各デバッグ セッションを終了するには、gdb プロンプトで「」と入力 q
します。