共用方式為


偵錯合作夥伴應用程式

重要

這是 Azure Sphere (舊版) 檔。 Azure Sphere(舊版)將於 2027 年 9 月 27 日淘汰,且使用者此時必須移轉至 Azure Sphere(整合式)。 使用位於 TOC 上方的版本選取器來檢視 Azure Sphere (整合式) 檔。

  1. 確定您的裝置已透過USB連線到您的電腦。 在 [設定啟動專案] 功能表中,選取 [Azure Sphere 應用程式][所有核心],其中 Azure Sphere 應用程式是您最上層專案的名稱,或按 F5

    遠端 GDB 調試程式按鈕

  2. 如果系統提示您建置專案,請選取 [ ]。 Visual Studio 會編譯夥伴應用程式、建立映像套件、 側載 到面板,並以偵錯模式啟動它們。 側載 表示應用程式會透過有線連線直接從電腦傳遞,而不是透過雲端傳遞。

    請注意 [檢視>輸出>顯示輸出來源:置輸出] 中的路徑,指出您電腦上的輸出映像套件位置。 當您準備好建立部署時,您必須知道映像套件的路徑。

  3. 根據預設,[ 輸出 ] 視窗會顯示 [裝置輸出] 的 輸出。 若要查看調試程式的訊息,請從 [顯示輸出來源:] 下拉功能表中選取 [偵錯]。 您也可以透過 >[偵錯 Windows] 功能表檢查程式反組譯碼、緩存器或記憶體。

如果您有兩個 RTApp,請確定兩者都 列為最上層launch.vs.json檔案中的合作夥伴應用程式。

使用 Visual Studio 調試程式來設定斷點、暫停、逐步執行、逐步執行、重新啟動或停止應用程式。

在 C 原始碼的斷點停止時,您可以開啟 顯示目前位址的反組譯 碼視窗 、目前命令的組譯工具助記鍵,以及涉及的緩存器或正在執行的原始程式碼命令等資訊。

若要開啟 反組譯碼 視窗:

  1. 確定 Visual Studio 中已開啟包含斷點的 C 程式代碼原始程式檔。
  2. 選取 [偵> Windows>反組譯碼],或按 Alt+8。
  1. 開啟包含您合作夥伴應用程式的資料夾。 Visual Studio Code 會偵測工作區檔案,並詢問您是否要開啟工作區。 選取 [開啟工作區] 以同時開啟即時應用程式和高階應用程式。

  2. 以滑鼠右鍵按兩個CMakeLists.txt檔案之一,然後選取 [ 建置所有專案]。

  3. 按兩下 Visual Studio Code 活動列中的 [執行] 圖示。

  4. 在顯示在畫面左側視窗頂端的下拉功能表上,選取 [啟動 Azure Sphere 應用程式][gdb][工作區]。

  5. 按 F5 建置和偵錯專案。 如果專案先前尚未建置,或檔案已變更並重建是必要的,Visual Studio Code 會在偵錯開始之前建置專案。

  6. 等候數秒,讓 Visual Studio Code 建置應用程式、建立映像套件、將它們部署到面板,然後在偵錯模式中啟動它們。 您會在一路上的 [輸出 ] 窗格中看到狀態更新。

    首先,CMake 會判斷是否需要建置應用程式。 如果是,焦點會移至輸出視窗,以顯示 CMake/Build 的輸出。

    接下來,輸出窗格會顯示 azsphere 的輸出,因為它會將映射套件部署至裝置。 最後,偵錯控制台會接收焦點,並顯示 gdb 輸出。

使用 Visual Studio Code 調試程式來設定斷點、暫停、逐步執行、逐步執行、重新啟動或停止應用程式。

當您在 C 原始程式碼中的斷點停止時,您可以開啟反組譯碼檢視,其中顯示目前位址、原始十六進位數據、目前命令的彙編工具助記項,以及涉及的緩存器或正在執行的原始程式碼命令等資訊。

若要開啟反組譯碼檢視:

  1. 確定 Visual Studio Code 編輯器中開啟包含斷點的 C 程式代碼原始程序檔。
  2. 在編輯器視窗中按兩下滑鼠右鍵,然後選取 [開啟反組譯碼檢視],或選取 [檢視>命令選擇區>開啟反組譯碼檢視]。
  1. 如果應用程式正在執行,請停止即時可用的應用程式。

    azsphere device app stop --component-id <component id>
    
  2. 使用偵錯重新啟動即時可用的應用程式。

    azsphere device app start --component-id <component id>
    

    此命令會傳回應用程式執行所在的核心。

      <component id>
      App state   : running
      Core        : Real time 0
    
  3. 流覽至應用程式所建置之 sysroot 的 Openocd 資料夾。 sysroot 會安裝在 Azure Sphere SDK 安裝資料夾中。 例如,在 Windows 上,資料夾預設 C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd 會安裝在 Linux 上,位於 /opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux

  4. 如下列範例所示執行 openocd 。 此範例假設應用程式是在核心 0 上執行。 如果應用程式在核心 1 上執行,請將 「targets io0」 取代為 「targets io1」。

    openocd -f mt3620-rdb-ftdi.cfg -f mt3620-io0.cfg -c "gdb_memory_map disable" -c "gdb_breakpoint_override hard" -c init -c "targets io0" -c halt -c "targets"
    
  5. 使用 PowerShell、Windows 命令提示字元或 Linux 命令殼層開啟命令行介面。

  6. 瀏覽至包含即時可用的應用程式 .out 檔案的資料夾,然後啟動 arm-none-eabi-gdb,這是 GNU Arm Embedded Toolchain 的一部分:

    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
    
  7. OpenOCD 伺服器會在 :4444 上提供 GDB 伺服器介面。 設定偵錯的目標。

    target remote :4444

  8. 您現在可以執行 gdb 命令。 在函式 HandleSendTimerDeferred 新增斷點:

    break HandleSendTimerDeferred

  9. 線上的終端機模擬器應該會顯示即時可用的應用程式的輸出。

  10. 開啟新的 Azure Sphere 命令提示字元 (Windows) 或終端機視窗 (Linux)。

  11. 流覽至包含高階應用程式 .imagepackage 檔案的資料夾。

  12. 如果應用程式正在執行,請停止它,然後使用偵錯重新啟動它:

    azsphere device app stop --component-id <ComponentId>
    
    azsphere device app start --debug-mode --component-id <ComponentId>
    
  13. 開啟終端機模擬器,並在埠 2342 建立 192.168.35.2 的 Telnet 或 TCP 連線,以檢視高階應用程式的輸出。

  14. 使用下列命令啟動 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,讓應用程式可以以不同的 API 集合為目標,如應用程式運行時間版本、sysroots 和 Beta API 中所述。 sysroots 會安裝在 Sysroots 下的 Azure Sphere SDK 安裝資料夾中。

  15. 將遠端偵錯目標設定為埠 2345 上的 IP 位址 192.168.35.2:

    target remote 192.168.35.2:2345
    
  16. 在 SendMessageToRTApp 函式上新增斷點:

    break SendMessageToRTApp
    
  17. 輸入 c 以繼續,觀察 Telnet/TCP 終端機中的輸出,然後切換至包含您即時應用程式偵錯會話的命令提示字元或終端機視窗。

  18. 輸入 c 以繼續,並觀察連線序列會話中的輸出。

您可以在偵錯會話之間來回工作,在即時可用的應用程式與高階應用程式之間切換。 您應該在兩個輸出視窗中看到類似下列的輸出:

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