Partilhar via


Depurar aplicativos de parceiros

Importante

Esta é a documentação do Azure Sphere (Legado). O Azure Sphere (Legado) será desativado em 27 de setembro de 2027 e os usuários devem migrar para o Azure Sphere (Integrado) até esse momento. Use o seletor de versão localizado acima do sumário para exibir a documentação do Azure Sphere (Integrado).

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

    Botão Depurador GDB remoto

  2. Se você for solicitado a criar o projeto, selecione Sim. O Visual Studio compila os aplicativos parceiros, cria pacotes de imagem, faz sideload deles na placa e os inicia no modo de depuração. Sideload significa que os aplicativos são entregues diretamente do PC através de uma conexão com fio, em vez de entregues através da nuvem.

    Observe os caminhos em View >Output>Show output from: Build output, que indica o local dos pacotes de imagem de saída no seu PC. 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 suspenso Mostrar saída de: . Você também pode inspecionar a desmontagem do programa, registros ou memória através do menu Depurar>Windows.

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

Use o depurador do Visual Studio para definir pontos de interrupção, pausar, passar, 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 Desmontagem que mostra o endereço atual, o mnemônico assembler para o comando atual e informações como os registradores envolvidos ou o comando do código-fonte que está sendo executado.

Para abrir a janela Desmontagem :

  1. Verifique se o arquivo de origem do código C que contém o ponto de interrupção está aberto no Visual Studio.
  2. Selecione Depurar>Desmontagem do Windows>ou pressione Alt+8.
  1. Abra a pasta que contém os aplicativos parceiros. O Visual Studio Code deteta o arquivo de espaço de trabalho e pergunta se você deseja abri-lo. Selecione Abrir espaço de trabalho para abrir o aplicativo em tempo real e o aplicativo de alto nível de uma só vez.

  2. Clique com o botão direito do mouse em qualquer um dos dois arquivos CMakeLists.txt e selecione Construir todos os projetos.

  3. Clique no ícone Executar na barra de atividades de código do Visual Studio.

  4. No menu suspenso 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, o Visual Studio Code criará o projeto antes do início da depuração.

  6. Aguarde alguns segundos para que o 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á atualizações de status no painel Saída ao longo do caminho.

    Primeiro, o CMake determina se os aplicativos precisam ser construídos. Em caso afirmativo, o foco muda para a janela de saída, que exibe a saída do CMake/Build.

    Em seguida, o painel de saída mostra a saída do azsphere à medida que implanta o pacote de imagem no dispositivo. Finalmente, o Debug Console recebe foco e mostra a saída gdb.

Use o depurador de código do Visual Studio para definir pontos de interrupção, pausar, ultrapassar, entrar, reiniciar ou parar o aplicativo.

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

Para abrir a vista Desmontagem:

  1. Verifique se o arquivo de origem do código C que contém o ponto de interrupção está aberto em um editor de código do Visual Studio.
  2. Clique com o botão direito do rato na janela do editor e selecione Abrir Vista de Desmontagem ou selecione Ver>Paleta>de Comandos Abrir Vista de Desmontagem.
  1. Pare o aplicativo com capacidade de tempo real se ele estiver em execução.

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

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

    Este comando retorna o núcleo no qual o aplicativo está sendo executado.

      <component id>
      App state   : running
      Core        : Real time 0
    
  3. Navegue até a pasta Openocd para o sysroot com o qual o aplicativo foi construído. 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 está sendo executado no núcleo 0. Se o aplicativo estiver sendo executado 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 PowerShell, Prompt de Comando do Windows ou shell de comando do Linux.

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

    Linha de Comandos 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 de 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 capaz de tempo real.

  10. Abra um novo Prompt de Comando do Azure Sphere (Windows) ou uma nova 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, pare-o e reinicie-o com depuração:

    azsphere device app stop --component-id <ComponentId>
    
    azsphere 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 visualizar a saída do aplicativo de alto nível.

  14. Inicie o gdb com o seguinte comando:

    Linha de Comandos 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árias sysroots para que os aplicativos possam direcionar diferentes conjuntos de APIs, conforme descrito em Versão do tempo de execução 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 para o 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 em seu terminal Telnet/TCP e alterne para o prompt de comando ou janela do terminal que contém sua sessão de depuração de aplicativos em tempo real.

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

Você pode trabalhar entre sessões de depuração, alternando entre o aplicativo capaz de 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 gdb.