DEBUGGER
Está pode ser a solução para tornar mais fácil para você descobrir onde o programa está inativo. Isso permite que você veja facilmente as informações sobre variáveis globais e locais em seu programa. Para que você não precise se preocupar tanto na hora de procurar bugs!
Jogue no CMakeLists.txt o nome demo_hello_Debug.c compile, grave.
Existem três funções desconhecidas usadas no código acima, que são:
。 Após a reinicialização, as informações de exceção serão perdidas, portanto, não há como ler as informações anormais da pilha, portanto, é recomendável usar o seguinte comando na fase de depuração.
Desabilita a saída de informações de depuração por padrão. Em geral, depois que o dispositivo estiver em execução, você poderá enviar o comando AT por meio do assistente de depuração de porta serial para habilitar as informações de depuração e precisará reiniciá-lo após cada download. É muito problemático, por isso é recomendável usar o canal AT virtual para enviar automaticamente comandos AT através do software no estágio de depuração do programa para obter a função de abrir automaticamente a saída de informações de depuração.
//Via AT command
AT^TRACECTRL=0,1,1
vai mandar TRACE para DBG_TXD do Starter Kit.
/
Este código é o que faz as coisas, e a única coisa que ele faz é fazer seu programa congelar. Este exemplo é usado para criar uma cena de falha para apresentação.
Em seguida, o programa também usa uma variável global e uma variável local, respectivamente, e quando ele travar, você pode verificar o valor da variável no momento do travamento para ver se ela atende às suas expectativas.
3. Baixe e verifique
Tudo funciona bem e não há problemas.
Espere, parece que há algo errado, como imprimir um helloworld se foi. O tutorial anterior realmente se foi quando se tratava de verificação de download, mas hoje é apenas o começo.
Enquanto esperarmos pelas duas coisas acima, nosso conteúdo de hoje começa oficialmente! (Eu não esperei até esperar, foram cerca de 15s).
Quarto, comece a depurar
4.1. GDB lê informações da pilha
4.1.1. Clique abaixo da guia Tools GDB Launcher
4.1.2. Selecione o arquivo correspondente na pequena janela que se abre.
Selecione o arquivo errado no diretório do projeto na caixa ELF !!~\iot_sdk_4g_8910Main\hex\Air720U_CSDK_demo_Debug_map\CSDK_RDA8910.elf
Modo. Em seguida, clique em Launch com 8910 AP
4.1.3. Carregue o arquivo ELF do APP
Normalmente, você verá uma interface como esta.
Os botões a seguir serão usados mais tarde, então vamos apresentá-los primeiro. Da esquerda para a direita: [Informações de registro], [Informações de memória], [Pilha de chamadas], [Exibir variáveis globais], [Variáveis locais], [Não sei o que é], [Console GDB].
Clique no terceiro botão para ver o efeito. Veja um, e há apenas alguns pontos de interrogação nele. O que é chamado em nosso programa é que todos eles têm uma palavra-chave que é. O que é realmente chamado é a interface fornecida pela camada subjacente. Então, por que a ferramenta de depuração é encontrada, mas não encontrada?
O fenômeno acima ocorre porque o que acabou de ser carregado é, na verdade, o arquivo ELF subjacente e o arquivo compilado pelo usuário ainda não foi carregado. Para carregar o arquivo ELF do usuário, basta clicar no último botão (o console gdb) e digitar o seguinte comando na janela que se abre. Esse comando não é fixo e precisa ser modificado com base no local real em que o projeto está armazenado.
:Antes de entrar, verifique se um arquivo é gerado no diretório raiz do projeto. Após a conclusão da compilação deste arquivo, ele precisa ser executado no console do gdb.OPENAT_assertiot_debug_assertassertiot_debug_assertOPENAT_assertOPENAT_assertiot_debug_assertapp.elfsource D:\AirJob\RDA8910CSDK\iot_sdk_4g_8910Main\start.gdb注意start.gdb自动生成的
Depois que a entrada terminar, o console prometerá uma bagunça de dados, basta procurar este campo nele e, se você encontrá-lo, é metade da batalha.
Depois que o carregamento for bem-sucedido, clique no terceiro botão novamente (você precisa fechar e reabrir a janela da pilha aberta anteriormente). Neste momento, antes da descoberta de ?? Foi substituído por uma função. O do meio é a tarefa de teste que acabamos de escrever, e também vemos o local do acidente à esquerda.demo_Debug.cdemo_hello_Debug
4.2. Visualizar informações variáveis
Na demonstração, escrevemos uma variável global e uma variável local para teste. Vamos ver se podemos ler as informações das variáveis em caso de travamento.demo_hello_Debug_num
4.2.1, por meio da leitura de informações de memória
Abra o arquivo e procure o endereço que o precede.
Clique no terceiro botão, insira as informações de endereço e leia os primeiros quatro bytes.
Analisando o programa, a variável global int é do tipo 4 bytes. Comece em 0 e adicione automaticamente os tempos dentro do loop for. Saia do loop e depois falhe, então o resultado é igual a hexadecimal. E como int tem quatro bytes, 15 deve ser igual para ver se é o mesmo que os dados lidos acima.~\iot_sdk_4g_8910Main\hex\Air720U_CSDK_demo_Debug_map\app.mapdemo_hello_Debug_num0x80f006200x80f006200x0000000f15demo_hello_Debug_num15150x0f0x0000000f
}
4.2.2 Leitura através do Watch (variáveis locais também podem ser usadas)
Algumas pessoas dizem: "Oh, isso é tão problemático". Você também tem que olhar para o endereço no mapa e ir até a memória para encontrá-lo você mesmo. Então aqui vem o caminho mais fácil.
Conforme mostrado na figura acima, clique no 4º botão, entre e na caixa de entrada e, finalmente, a janela exibirá as informações da variável.
: Aqui você só pode ver os valores de variáveis locais que não foram otimizadas pelo compilador. Se estiver otimizado, você não poderá vê-lo! Definir variáveis com palavras-chave impede a otimização.demo_hello_Debug_numn注意volatile
4.2.3. Olhar direto simples e brutal
Passe o mouse sobre a variável correspondente por um tempo e o valor da variável sairá ̑̑ฅ( ˃̶ ̇ω ̇˂̶ ฅ).
Ref
RDA8910(4GCAT1)CSDK二次开发:14、CSDK程序死机了怎么办?_rda 编程-CSDN博客
RDA8910(4GCAT1)CSDK二次开发:1、环境搭建_4g cat1 中boot按键作用-CSDN博客
How to Install GCC and GDB on Windows Using MSYS2 — Tutorial | by Sajid Anam Ifti | Medium
Mais detalhes em www.smartcore.com.br
Nenhum comentário:
Postar um comentário