Debug di applicazioni partnerDebug partner applications

  1. Assicurarsi che il dispositivo sia connesso al PC tramite USB.Ensure that your device is connected to your PC by USB. Nel menu Imposta elemento di avvio selezionare debugger GDB (tutti i core) o premere F5.In the Set startup item menu, select GDB Debugger (All Cores) or press F5.

    Pulsante Debugger GDB remoto

  2. Se viene richiesto di compilare il progetto, selezionare .If you are prompted to build the project, select Yes. Visual Studio compila le applicazioni partner, crea pacchetti di immagini, li sideloads sulla lavagna e li avvia in modalità di debug.Visual Studio compiles the partner applications, creates image packages, sideloads them onto the board, and starts them in debug mode. Sideload indica che le applicazioni vengono recapitate direttamente dal PC tramite una connessione cablata, anziché distribuite attraverso il cloud.Sideloading means that the applications are delivered directly from the PC over a wired connection, rather than delivered through the cloud.

    Si notino i percorsi nell'output di compilazione, che indica il percorso dei pacchetti di immagini di output nel PC.Note the paths in the Build output, which indicates the location of the output image packages on your PC. Quando si è pronti per creare una distribuzione, è necessario conoscerne i percorsi.When you are ready to create a deployment, you will need to know the paths to the image packages.

  3. Per impostazione predefinita, la finestra di Output mostra l'output di Output del dispositivo.By default, the Output window shows output from Device Output. Per visualizzare i messaggi del debugger, selezionare Debug dal menu a discesa Mostra output di: .To see messages from the debugger, select Debug from the Show output from: dropdown menu. È anche possibile esaminare il disassembly, i registri o la memoria del programma tramite il menu Debug > Windows.You can also inspect the program disassembly, registers, or memory through the Debug > Windows menu.

Immettere tutti i comandi gdb desiderati.Issue whatever gdb commands you choose. Ad esempio:For example:

break main cbreak main c

I comandi break e c impostano, nell'ordine, un punto di interruzione all'inserimento di main() per poi continuare l'esecuzione dopo il punto di interruzione.The break and c commands set a breakpoint upon entry to main() and then continue execution after the breakpoint, respectively. Sono disponibili diversi documenti relativi a gdb.Numerous sources of documentation are available for gdb.

  1. Aprire la cartella contenente le applicazioni partner.Open the folder containing your partner applications. Visual Studio Code rileva il file dell'area di lavoro e chiede se si desidera aprire l'area di lavoro.Visual Studio Code detects the workspace file and asks if you want to open the workspace. Selezionare Apri area di lavoro per aprire contemporaneamente l'applicazione in tempo reale e l'applicazione di alto livello.Select Open Workspace to open both the real-time application and high-level application at once.

  2. Fare clic con il pulsante destro del mouse su uno dei due file CMakeLists.txt e selezionare Compila tutti i progetti.Right-click on either of the two CMakeLists.txt files and select Build All Projects.

  3. Fare clic sull'icona Esegui nella barra delle attività del Visual Studio Code.Click the Run icon in the Visual Studio Code Activity Bar.

  4. Nel menu a discesa visualizzato nella parte superiore della finestra sul lato sinistro della schermata selezionare Avvia per applicazioni Azure Sphere (gdb) (area di lavoro).On the pulldown menu that appears at the top of the window on the left side of the screen, select Launch for Azure Sphere Applications (gdb)(workspace).

  5. Premere F5 per compilare ed eseguire il debug del progetto.Press F5 to build and debug the project. Se il progetto non è stato compilato in precedenza o se i file sono stati modificati e la ricompilazione è obbligatoria, Visual Studio Code compilerà il progetto prima dell'avvio del debug.If the project has not previously been built, or if files have changed and rebuilding is required, Visual Studio Code will build the project before debugging starts.

  6. Attendere alcuni secondi per Visual Studio Code compilare le applicazioni, creare i pacchetti immagine, distribuirli nella lavagna e avviarli in modalità di debug.Wait several seconds for Visual Studio Code to build the applications, create the image packages, deploy them to the board, and start them in debug mode. Gli aggiornamenti di stato verranno visualizzati nel riquadro di output lungo il percorso.You'll see status updates in the Output pane along the way.

    In primo luogo, CMake determina se le applicazioni devono essere compilate.First, CMake determines whether the applications need to be built. In tal caso, lo stato attivo passa alla finestra di output, che Visualizza l'output da CMake/Build.If so, focus shifts to the output window, which displays the output from CMake/Build.

    Successivamente, la finestra di output mostra l'output di azsphere mentre distribuisce il pacchetto immagine nel dispositivo.Next, the output window shows the output from azsphere as it deploys the image package to the device. Infine, la console di debug riceve lo stato attivo e mostra l'output di gdb.Finally, the Debug Console receives focus and shows gdb output.

Immettere tutti i comandi gdb desiderati.Issue whatever gdb commands you choose. Ad esempio:For example:

break main cbreak main c

I comandi break e c impostano, nell'ordine, un punto di interruzione all'inserimento di main() per poi continuare l'esecuzione dopo il punto di interruzione.The break and c commands set a breakpoint upon entry to main() and then continue execution after the breakpoint, respectively. Sono disponibili diversi documenti relativi a gdb.Numerous sources of documentation are available for gdb.

  1. Arrestare l'applicazione con supporto in tempo reale, se è in esecuzione.Stop the real-time capable application if it's running.

    azsphere device app stop --componentid <component id>

  2. Riavviare l'applicazione con supporto in tempo reale con il debug.Re-start the real-time capable application with debugging.

    azsphere device app start --componentid <component id>

    Questo comando restituisce la core su cui è in esecuzione l'applicazione.This command returns the core on which the application is running.

      <component id>
      App state   : running
      Core        : Real time 0
    
  3. Passare alla cartella Openocd per il sysroot in cui è stata creata l'applicazione.Navigate to the Openocd folder for the sysroot that the application was built with. I sysroot sono installati nella cartella di installazione di Azure Sphere SDK.The sysroots are installed in the Azure Sphere SDK installation folder. Ad esempio, in Windows la cartella viene installata per impostazione predefinita in C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd e in Linux in /opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux.For example, on Windows the folder is installed by default at C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd and on Linux, at /opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux.

  4. Eseguire openocd come illustrato nell'esempio seguente.Run openocd as the following example shows. L'esempio presuppone che l'app sia in esecuzione nella core 0.The example assumes the app is running on core 0. Se l'app è in esecuzione nel core 1, sostituire "targets io0" con "targets io1".If the app is running on core 1, replace "targets io0" with "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. Aprire un nuovo prompt dei comandi di Azure Sphere (Windows CLI V1), un prompt dei comandi standard o PowerShell (Windows CLI v2 beta) o una finestra del terminale (Linux).Open a new Azure Sphere Command Prompt (Windows CLI v1), standard Command Prompt or PowerShell (Windows CLI v2 Beta), or terminal window (Linux).

  6. Passare alla cartella che contiene il file dell'applicazione in tempo reale. out e avviare arm-none-eabi-gdb , che fa parte della piattaforma di gestione di Azure ARM Embedded:Navigate to the folder that contains the real-time capable application .out file and start arm-none-eabi-gdb, which is part of the GNU Arm Embedded Toolchain:

    "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" IntercoreComms_RTApp_MT3620_BareMetal.out
    

    Se si usa PowerShell, i comandi racchiusi tra virgolette come questo devono essere preceduti dall' & operatore.If you are using PowerShell, quoted commands such as this one must be preceded by the & operator.

  7. Il server OpenOCD fornisce un'interfaccia per il server GDB su :4444.The OpenOCD server provides a GDB server interface on :4444. Impostare la destinazione per il debug.Set the target for debugging.

    target remote :4444

  8. È ora possibile inviare comandi gdb all'applicazione in grado di supportare in tempo reale.You can now issue gdb commands to the real-time capable application. Aggiungere un punto di interruzione nella funzione HandleSendTimerDeferred:Add a breakpoint at the function HandleSendTimerDeferred:

    break HandleSendTimerDeferred

  9. L'emulatore di terminale connesso dovrebbe visualizzare l'output dell'applicazione con supporto in tempo reale.The connected terminal emulator should display output from the real-time capable application.

  10. Aprire un nuovo prompt dei comandi di Azure Sphere (Windows) o una finestra del terminale (Linux).Open a new Azure Sphere Command Prompt (Windows) or terminal window (Linux).

  11. Passare alla cartella che contiene il file con estensione imagepackage dell'applicazione di livello superiore.Navigate to the folder that contains the high-level application .imagepackage file.

  12. Se l'applicazione è in esecuzione, arrestarla e riavviarla con il debug:If the application is running, stop it and then restart it with debugging:

    azsphere device app stop --componentid <ComponentId>

    azsphere device app start --debug --componentid <ComponentId>

  13. Aprire un emulatore di terminale e stabilire una connessione Telnet o TCP a 192.168.35.2 sulla porta 2342 per visualizzare l'output dell'app di alto livello.Open a terminal emulator and establish a Telnet or TCP connection to 192.168.35.2 at port 2342 to view the high-level app's output.

  14. Avviare gdb con il comando seguente:Start gdb with the following command:

    "C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\gcc\arm-poky-linux-musleabi-gdb.exe" IntercoreComms_HighLevelApp.out
    

    Se si usa PowerShell, i comandi racchiusi tra virgolette come questo devono essere preceduti dall' & operatore.If you are using PowerShell, quoted commands such as this one must be preceded by the & operator.

  15. Impostare la destinazione di debug remoto su indirizzo IP 192.168.35.2 sulla porta 2345:Set the remote debugging target to IP address 192.168.35.2 on port 2345:

    target remote 192.168.35.2:2345

  16. Aggiungere un punto di interruzione nella funzione SendMessageToRTApp:Add a breakpoint at the function SendMessageToRTApp:

    break SendMessageToRTApp

  17. Digitare c per continuare, osservare l'output nel terminale Telnet/TCP, quindi passare al prompt dei comandi o alla finestra del terminale contenente la sessione di debug dell'applicazione in tempo reale.Type c to continue, observe the output in your Telnet/TCP terminal, then switch to the command prompt or terminal window containing your real-time application debugging session.

  18. Digitare c per continuare e osservare l'output nella sessione seriale connessa.Type c to continue and observe the output in your connected serial session.

È possibile lavorare tra le sessioni di debug, passando tra l'applicazione in tempo reale e l'applicazione di alto livello.You can work back and forth between debugging sessions, switching between the real-time capable application and the high-level application. Verrà visualizzato un output simile al seguente nelle due finestre di output:You should see output similar to the following in the two output windows:

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

Per terminare ogni sessione di debug, digitare q al prompt di gdb.To end each debugging session, type q at the gdb prompt.