Partilhar via


Depurar aplicações de parceiros

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

    Botão Depurador de GDB Remoto

  2. Se lhe for pedido para criar o projeto, selecione Sim. O Visual Studio compila as aplicações parceiras, cria pacotes de imagens, coloca-os em sideloads no quadro e inicia-os no modo de depuração. O sideload significa que as aplicações são fornecidas diretamente a partir do PC através de uma ligação com fios, em vez de serem entregues através da cloud.

    Tenha em atenção os caminhos na saída Ver>Apresentação deSaída> de: Resultado da compilação, que indica a localização dos pacotes de imagem de saída no PC. Quando estiver pronto para criar uma implementação, terá de saber os caminhos para os pacotes de imagens.

  3. Por predefinição , a janela Saída mostra o resultado da Saída do Dispositivo. Para ver mensagens do depurador, selecione Depurar no menu pendente Mostrar saída de: . Também pode inspecionar a desmontagem, registos ou memória do programa através do menu Depurar>o Windows .

Se tiver duas RTApps, certifique-se de que ambas estão listadas como aplicações de parceiros no ficheiro de launch.vs.json de nível superior.

Utilize o depurador do Visual Studio para definir pontos de interrupção, colocar em pausa, avançar, avançar, reiniciar ou parar a aplicação.

Enquanto está parado num ponto de interrupção no código fonte C, pode abrir uma janela Desmontar que mostra o endereço atual, o assembler mnemonic para o comando atual e informações como os registos envolvidos ou o comando de código fonte a ser executado.

Para abrir a janela Desmontar :

  1. Certifique-se de que o ficheiro de origem do código C que contém o ponto de interrupção está aberto no Visual Studio.
  2. Selecione Depurar>o Windows>Desmontar ou prima Alt+8.
  1. Abra a pasta que contém as suas aplicações parceiras. O Visual Studio Code deteta o ficheiro da área de trabalho e pergunta se pretende abrir a área de trabalho. Selecione Abrir Área de Trabalho para abrir a aplicação em tempo real e a aplicação de alto nível ao mesmo tempo.

  2. Clique com o botão direito do rato em qualquer um dos dois ficheiros CMakeLists.txt e selecione Criar Todos os Projetos.

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

  4. No menu pendente apresentado na parte superior da janela no lado esquerdo do ecrã, selecione Iniciar Aplicações do Azure Sphere (gdb)(área de trabalho).

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

  6. Aguarde vários segundos para que o Visual Studio Code crie as aplicações, crie os pacotes de imagens, implemente-os no quadro e inicie-os no modo de depuração. Verá atualizações de estado no painel Saída ao longo do caminho.

    Em primeiro lugar, o CMake determina se as aplicações precisam de ser criadas. Em caso afirmativo, o foco muda para a janela de saída, que apresenta a saída de CMake/Build.

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

Utilize o depurador do Visual Studio Code para definir pontos de interrupção, colocar em pausa, avançar, avançar, reiniciar ou parar a aplicação.

Enquanto está parado num ponto de interrupção no código fonte C, pode abrir uma vista Desmontagem que mostra o endereço atual, os dados hexadecimais não processados, o assembler mnemonic para o comando atual e informações como os registos envolvidos ou o comando de código fonte a ser executado.

Para abrir a vista Desmontar:

  1. Certifique-se de que o ficheiro de origem do código C que contém o ponto de interrupção está aberto num editor do Visual Studio Code.
  2. Clique com o botão direito do rato na janela do editor e selecione Abrir Vista Desmontada ou selecione Ver> Paleta > deComandosAbrir Vista Desmontada.
  1. Pare a aplicação com capacidade em tempo real se estiver em execução.

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

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

    Este comando devolve o núcleo no qual a aplicação está em execução.

      <component id>
      App state   : running
      Core        : Real time 0
    
  3. Navegue para a pasta Openocd para obter o sysroot com o qual a aplicação foi criada. Os sysroots são instalados na pasta de instalação do SDK do Azure Sphere. Por exemplo, no Windows, a pasta é instalada por predefiniçã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 seguinte exemplo. O exemplo pressupõe que a aplicação está em execução no núcleo 0. Se a aplicação 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 comandos com o PowerShell, a Linha de Comandos do Windows ou a shell de comandos do Linux.

  6. Navegue para a pasta que contém o ficheiro .out da aplicação em tempo real e inicie arm-none-eabi-gdbo , que faz parte da Cadeia de Ferramentas GNU Arm Embedded:

    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 pode executar comandos gdb. Adicione um ponto de interrupção na função HandleSendTimerDeferred:

    break HandleSendTimerDeferred

  9. O emulador de terminal ligado deve apresentar o resultado da aplicação com capacidade em tempo real.

  10. Abra uma nova Linha de Comandos do Azure Sphere (Windows) ou uma janela de terminal (Linux).

  11. Navegue para a pasta que contém o ficheiro .imagepackage de aplicação de alto nível.

  12. Se a aplicação estiver em execução, pare-a e reinicie-a 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 ligação Telnet ou TCP para 192.168.35.2 na porta 2342 para ver a saída da aplicação de alto nível.

  14. Inicie a 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ários sysroots para que as aplicações possam visar diferentes conjuntos de API, conforme descrito em Versão do runtime da aplicação, 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. Escreva c para continuar, observe a saída no terminal Telnet/TCP e, em seguida, mude para a linha de comandos ou janela de terminal que contém a sua sessão de depuração da aplicação em tempo real.

  18. Escreva c para continuar e observar a saída na sua sessão de série ligada.

Pode trabalhar entre sessões de depuração e alternar entre a aplicação com capacidade em tempo real e a aplicação de alto nível. Deverá ver um resultado semelhante ao 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 terminar cada sessão de depuração, escreva q na linha de comandos gdb.