Share via


Depurar aplicativos parceiros

  1. Verifique se o dispositivo está conectado ao computador por USB. No menu Definir item de inicialização , selecione Aplicativo do Azure Sphere (Todos os Núcleos) em que o Aplicativo Azure Sphere é o nome do seu projeto de nível superior ou pressione F5.

    Botão Depurador de GDB remoto

  2. Se você for solicitado a criar o projeto, selecione Sim. O Visual Studio compila os aplicativos parceiros, cria pacotes de imagem, os carrega de lado no quadro e inicia-os no modo de depuração. Sideloading significa que os aplicativos são entregues diretamente do computador por meio de uma conexão com fio, em vez de entregues pela nuvem.

    Observe os caminhos no Modo> deExibição Saída>Mostrar saída de: Saída de build, que indica o local dos pacotes de imagem de saída em seu computador. Quando estiver pronto para criar uma implantação, você precisará conhecer os caminhos para os pacotes de imagem.

  3. Por padrão, a janela Saída mostra a saída da Saída do Dispositivo. Para ver as mensagens do depurador, selecione Depurar no menu mostrar saída de: menu suspenso. Você também pode inspecionar a desmontagem do programa, registros ou memória por meio do menu Depurar>Windows .

Se você tiver dois RTApps, verifique se ambos estão listados como aplicativos parceiros no arquivo de launch.vs.json de nível superior.

Use o depurador do Visual Studio para definir pontos de interrupção, pausar, passar por cima, entrar, reiniciar ou parar o aplicativo.

Enquanto estiver parado em um ponto de interrupção no código-fonte C, você pode abrir uma janela Desmontar que mostra o endereço atual, o mnemônico da montadora para o comando atual e informações como os registros envolvidos ou o comando de código-fonte que está sendo executado.

Para abrir a janela Desmontar :

  1. Verifique se o arquivo de código-fonte C que contém o ponto de interrupção está aberto no Visual Studio.
  2. Selecione Depurar>Desmontagem doWindows> ou pressione Alt+8.
  1. Abra a pasta que contém seus aplicativos parceiros. Visual Studio Code detecta o arquivo de workspace e pergunta se você deseja abrir o workspace. Selecione Abrir Workspace para abrir o aplicativo em tempo real e o aplicativo de alto nível ao mesmo tempo.

  2. Clique com o botão direito do mouse em qualquer um dos dois arquivos CMakeLists.txt e selecione Compilar Todos os Projetos.

  3. Clique no ícone Executar na Barra de Atividades Visual Studio Code.

  4. No menu pulldown que aparece na parte superior da janela no lado esquerdo da tela, selecione Iniciar Aplicativos do Azure Sphere (gdb)(workspace).

  5. Pressione F5 para criar e depurar o projeto. Se o projeto não tiver sido criado anteriormente ou se os arquivos tiverem sido alterados e a reconstrução for necessária, Visual Studio Code criará o projeto antes do início da depuração.

  6. Aguarde vários segundos para que Visual Studio Code crie os aplicativos, crie os pacotes de imagem, implante-os no quadro e inicie-os no modo de depuração. Você verá status atualizações no painel Saída ao longo do caminho.

    Primeiro, o CMake determina se os aplicativos precisam ser criados. Nesse caso, o foco muda para a janela de saída, que exibe a saída de CMake/Build.

    Em seguida, o painel de saída mostra a saída à medida que implanta o pacote de imagem no dispositivo. Por fim, o Console de Depuração recebe o foco e mostra a saída do gdb.

Use o depurador Visual Studio Code para definir pontos de interrupção, pausar, passar por cima, entrar, reiniciar ou parar o aplicativo.

Enquanto estiver parado em um ponto de interrupção no código-fonte C, você pode abrir uma exibição de desmontagem que mostra o endereço atual, dados hex brutos, o mnemônico da montadora para o comando atual e informações como os registros envolvidos ou o comando de código-fonte sendo executado.

Para abrir a exibição Desmontar:

  1. Verifique se o arquivo de código-fonte C que contém o ponto de interrupção está aberto em um editor de Visual Studio Code.
  2. Clique com o botão direito do mouse na janela do editor e selecione Abrir Exibição desmontada ou selecione Exibir> Exibiçãode Desmontagem Abertada Paleta> de Comandos.
  1. Pare o aplicativo com capacidade em tempo real se ele estiver em execução.

    az sphere device app stop --component-id <component id>
    
  2. Reinicie o aplicativo com capacidade em tempo real com depuração.

    az sphere device app start --component-id <component id>
    

    Esse comando retorna o núcleo no qual o aplicativo está em execução.

      <component id>
      App state   : running
      Core        : Real time 0
    
  3. Navegue até a pasta Openocd para o sysroot com o qual o aplicativo foi criado. Os sysroots são instalados na pasta de instalação do SDK do Azure Sphere. Por exemplo, no Windows, a pasta é instalada por padrão em C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd e no Linux, em /opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux.

  4. Execute openocd como mostra o exemplo a seguir. O exemplo pressupõe que o aplicativo esteja sendo executado no núcleo 0. Se o aplicativo estiver em execução no núcleo 1, substitua "targets io0" por "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. Abra uma interface de linha de comando usando o PowerShell, o Prompt de Comando do Windows ou o shell de comando do Linux.

  6. Navegue até a pasta que contém o arquivo .out do aplicativo com capacidade em tempo real e inicie arm-none-eabi-gdb, que faz parte do GNU Arm Embedded Toolchain:

    Prompt de Comando do 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. O servidor OpenOCD fornece uma interface do servidor GDB em :4444. Defina o destino para depuração.

    target remote :4444

  8. Agora você pode executar comandos gdb. Adicione um ponto de interrupção na função HandleSendTimerDeferred:

    break HandleSendTimerDeferred

  9. O emulador de terminal conectado deve exibir a saída do aplicativo com capacidade em tempo real.

  10. Abra um novo Prompt de Comando do Azure Sphere (Windows) ou uma janela de terminal (Linux).

  11. Navegue até a pasta que contém o arquivo .imagepackage do aplicativo de alto nível.

  12. Se o aplicativo estiver em execução, interrompa-o e reinicie-o com a depuração:

    az sphere device app stop --component-id <ComponentId>
    
    az sphere device app start --debug-mode --component-id <ComponentId>
    
  13. Abra um emulador de terminal e estabeleça uma conexão Telnet ou TCP para 192.168.35.2 na porta 2342 para exibir a saída do aplicativo de alto nível.

  14. Inicie gdb com o seguinte comando:

    Prompt de Comando do 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
    

    Nota

    O SDK do Azure Sphere é fornecido com vários sysroots para que os aplicativos possam direcionar diferentes conjuntos de API, conforme descrito em Versão de runtime do aplicativo, sysroots e APIs Beta. Os sysroots são instalados na pasta de instalação do SDK do Azure Sphere em Sysroots.

  15. Defina o destino de depuração remota como endereço IP 192.168.35.2 na porta 2345:

    target remote 192.168.35.2:2345
    
  16. Adicione um ponto de interrupção na função SendMessageToRTApp:

    break SendMessageToRTApp
    
  17. Digite c para continuar, observe a saída no terminal Telnet/TCP e, em seguida, alterne para o prompt de comando ou a janela do terminal que contém a sessão de depuração do aplicativo em tempo real.

  18. Digite c para continuar e observe a saída em sua sessão serial conectada.

Você pode trabalhar para frente e para trás entre sessões de depuração, alternando entre o aplicativo com capacidade em tempo real e o aplicativo de alto nível. Você deve ver uma saída semelhante à seguinte nas duas janelas de saída:

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

Para encerrar cada sessão de depuração, digite q no prompt do gdb.