Debug Remoto na Raspberry Pi através do Plugin Pydev do Eclipse

Pydev

Todo programador sabe o poder e as praticidades que os IDE’s (Integrated Development Environment) fornecem às rotinas presentes no dia a dia do desenvolvimento de software. Verificadores de sintaxe, automatizador de tarefas, interface gráfica amigável, compilador e debugger costumam formar o pacote básico de todo IDE. Hoje a grande maioria deles trabalham também com o conceito de plugin, podendo ampliar o poder do ambiente com toda e qualquer novidade tecnológica que acabe surgindo dentro do mundo do desenvolvimento. Unidades de controle de versão e de testes são os plugins mais típicos. Há quem seja contra o uso exacerbado de IDE’s, dado o possível “vício” que o programador possa construir com o ambiente, deixando de lado importantes conceitos e setups envolvidos no processo da engenharia do software. Abstendo-se de tamanha polêmica, o presente artigo visa apresentar um tutorial de configuração do Pydev dentro do ambiente Eclipse, visando a construção de um ambiente de desenvolvimento remoto para a Raspberry Pi.

 

 

Pydev: Codificando em Python via Eclipse

 

O Pydev é um “thirdy-party-plugin” disponibilizado também para o Eclipse para desenvolvimento de software em linguagem Python. Além dos recursos básicos citados na sessão anterior, com o Pydev é possível fazer uso das mais diversas features de desenvolvimento de forma bem pythonica: fazendo a inclusão dos módulos referentes diretamente no código.

 

Remote Debugger: uma feature muito útil para aplicações embarcadas

 

Embora os hardwares destinados às aplicações embarcadas estejam cada vez mais poderosos, é inegável que ainda estão longe de alcançar o mesmo desempenho dos computadores tipo desktop. É possível, e em muitos casos aceitável, fazer a codificação dentro do próprio ambiente embarcado, contudo, caso queiramos desfrutar dos saborosos recursos encontrados nos IDE’s, teremos que pagar o devido preço. Sabendo que ainda há muitas queixas em relação ao desempenho dos IDE’s mesmo dentro das plataformas desks, não soa muito inteligente embarcar um container de recursos em um hardware que ainda possui suas limitações.

 

Frente a essa questão, o Pydev porta um recurso que ajuda a contornar o problema: o remote debug. Como queremos codificar na plataforma desk e rodar o código debugando-o em um hardware diferente, alguns artifícios adicionais serão necessários. Sabendo-se que o Debug Server do Eclipse comunica-se via UDP/IP, a conexão entre a estação de trabalho e a Raspberry Pi utilizada nesse tutorial foi do tipo Ethernet. As seguintes etapas explicitam de forma geral a cara de todo o processo:

  • Codificação da aplicação dentro do ambiente desktop, usufruindo dos poderosos recursos do IDE;
  • Transferência do código final via SSH para a Raspberry Pi;
  • Execução da aplicação remota (que porta também os módulos de debug remoto do pydev);
  • Conexão da aplicação remota com o Debug Server no Eclipse (transporte UDP);
  • Processo de Debug.

 

Enquanto o Eclipse atuará como um cliente da Raspberry Pi, a mesma atuará como um servidor de dados ao Debugger Server da estação de trabalho Desk.

 

Arquitetura do Ambiente de Desenvolvimento Remoto.
Figura 1: Arquitetura do Ambiente de Desenvolvimento Remoto.

 

Instalando o Pydev no Eclipse

 

Primeiramente devemos instalar o plugin do Pydev no Eclipse. Com o Eclipse rodando na sua máquina local, acesse a loja virtual marketplace.eclipse.org/ e faça uma busca por Pydev.

 

 Pesquisando o Plugin Pydev na loja virtual
Figura 2: Pesquisando o Plugin Pydev na loja virtual: marketplace.eclipse.org

 

Clique no botão “Install”, segure e arraste ao seu workspace dentro do Eclipse. Uma janela de instalação deve aparecer, dê um “check” em todas as opções disponíveis e confirme.

 

Instalando o Pydev no Eclipse.
Figura 3: Instalando o Pydev no Eclipse.

 

Após aceitar as condições de uso, finalize a instalação e reinicie o eclipse.

 

Finalizando a instalação do Pydev.
Figura 4: Finalizando a instalação do Pydev.

 

É recomendada a instalação do módulo “Remote System Explorer” também, basta repetir o mesmo processo anterior para a instalação desse plugin.

 

Plugin Remote System Explorer disponível na loja virtual
Figura 5: Plugin Remote System Explorer disponível na loja virtual: marketplace.eclipse.or

 

Instalando os módulos necessários do Pydev na Raspberry Pi

 

Para a Raspberry Pi não é preciso realizar a instalação completa do Pydev como fizemos no Eclipse. Basta instalarmos somente o módulo “pysrc files” do Pydev em um diretório conhecido do sistema de arquivos da Raspberry Pi e referenciarmos o caminho da pasta no código a ser debugado. É recomendado que a instalação do módulo seja feita na mesma pasta da aplicação (problemas de migração de ambiente podem ser facilmente evitados fazendo uso de referências relativas). Vejamos passo a passo como proceder:

 

Acesse este link para ser direcionado para o repositório da última versão estável do Pydev. Você verá uma estrutura em diretórios como é mostrado na Figura 6. Entre no subdiretório identificado como “plugins”.

 

Diretório Raíz dos Arquivos Fonte do Pydev.
Figura 6: Diretório Raíz dos Arquivos Fonte do Pydev.

 

Uma lista de arquivos no formato .jar estarão disponíveis para download. Na data do presente artigo, o Pydev se encontra em sua sexta versão e o módulo pysrc que precisamos para o debug remoto se encontra disponível para download através do arquivo “org.python.pydev.core_6.3.1.201802272029.jar”. Portanto o futuro leitor deve se atentar às possíveis alterações na organização dos arquivos com a ocorrência de novos lançamentos.

 

Localizado o arquivo .jar que contenha o módulo pysrc, façamos o download e a extração diretamente na Raspberry Pi.

 

 

Até aqui temos o Pydev completamente instalado em nossa estação desk, e parcialmente instalado na Raspberry Pi. Antes de fazer a inclusão e o setup do módulo pydev no código da aplicação, façamos o setup da comunicação SSH entre o PC e a Raspberry Pi. Caso o leitor já tenha essa comunicação devidamente estabelecida, eu peço que ignorem o próximo passo.

 

Configurando a conexão SSH entre o PC e a Raspberry Pi

 

Queremos codificar nossa aplicação em ambiente de desktop com todo conforto que o Eclipse (ou outro IDE) ofereça, para assim transferir o código resultante para a Raspberry Pi. O protocolo SSH (Secure Shell) é muito utilizado para logar e executar comandos de forma remota. Não é objetivo do presente artigo aprofundar-se na natureza criptográfica do SSH, por hora basta sabermos que o protocolo suporta a execução e transferência de arquivos entre estações de forma segura.

 

Gerando as chaves public/private na estação de trabalho

 

O protocolo SSH opera com criptografia do tipo RSA, devendo, portanto, possuir dois tipos de chaves criptográficas na estação de trabalho:

  • Chave privada (private key): Essa chave é intransferível e secreta (nunca passe essa chave em qualquer requisição);
  • Chave pública (public key): essa chave deve ser transferida às estações remotas de interesse.

 

Estando a estação remota munida com a respectiva chave pública da nossa estação de trabalho, a operação de autenticação (login/senha) é requisitada somente na primeira conexão (todas as operações posteriores dispensam autenticação devido à validação das chaves criptográficas). Para uma estação rodando uma distribuição Ubuntu/Linux teríamos:

 

 

Será requisitado um nome para as chaves geradas e em sequência um passphrase. Dê um nome e um passphrase que for conveniente. Nesse exemplo o passphrase foi deixado em branco:

 

 

Transferindo a chave pública para a estação remota

 

Agora basta incluir a chave pública gerada dentro do arquivo authorized keys da Raspberry Pi.

 

 

Vale lembrar que tanto o nome da chave pública como o campo “your_Raspberry_IP” devem ser substituídos pela chave pública e IP da Raspberry Pi do leitor. Após a primeira e única autenticação, poderemos conectar e transferir arquivos da nossa estação de trabalho para a Raspberry Pi.

 

Incluindo o Remote Debug no código fonte

 

Como já mencionado, as features de desenvolvimento no Pydev, ao invés de serem diretamente incluídas no IDE, são adicionadas diretamente no código-fonte. Assim, o módulo Remote_Debug_Feature.py realiza o setup basicamente da seguinte forma:

  1. Tenta importar o módulo pydevd pela localização incluída no PATH do Python (vale lembrar que estamos trabalhando com referências relativas, logo a pasta do pydevd deve estar situada no mesmo diretório da aplicação);
  2. Configura o IP da estação remota e a porta de comunicação;
  3. Define o ambiente de debug;
  4. Trata possíveis exceções.

 

 

Já na main basta fazer a inclusão do módulo, setar a flag de debug e fazer a respectiva chamada.

 

 

Estrutura do diretório da aplicação em exemplo.
Figura 7: Estrutura do diretório da aplicação em exemplo.

 

Depurando o código

 

Após desenvolver todo o código no Eclipse dentro da estação de trabalho, basta enviar uma cópia de todo o diretório para uma localização conhecida na Raspberry Pi. Como a Raspberry Pi já porta a chave pública da estação de trabalho, basta fazermos:

 

 

Precisamos utilizar a flag -R para recursivamente transferir todos os arquivos dentro do diretório app. O diretório de destino /home/pi/ pode ser alterado pelo leitor caso convir.

 

Agora basta dar um "run" na aplicação contida na Raspberry Pi. Novamente via SSH teremos:

 

 

Dentro do Eclipse vá em: Windows->Perspectives->Open Perspective->Debug.

 

Com a aplicação efetivamente ativa na Raspberry Pi, na perspectiva de Debug os botões de debug deverão estar ativos, a mensagem “Debug Server at port: 5678" deve estar visível na console e ainda uma série de objetos de debugs se encontrarão disponíveis.

 

Debug Remoto na perspectiva de Debug no Eclipse.
Figura 8: Debug Remoto na perspectiva de Debug no Eclipse.

 

Conforme os comandos “step into” forem acionados, o programa vai sendo depurado passo a passo. Ao chegar na instrução print “Remote Debug works” verifica-se no terminal da estação de trabalho que o Debug Remoto funciona de fato!

 

 

 

Conclusão

 

Vimos que hardwares embarcados possuem suas limitações, e que ambientes de desenvolvimentos podem ser custosos. Afim de otimizar as atividades de desenvolvimento recomenda-se que o ambiente seja montado em uma máquina local Host, e o código transferido via SSH para o Target. Caso alguma depuração for requerida a qualquer instante, um ambiente de debug já se encontrará todo configurado e pronto para uso.

 

Espero ter ajudado com essas dicas. Havendo dúvida ou alguma ideia diferente peço que comentem! 

 

Obrigado e até a próxima!

 

 

Saiba mais

 

Utilizando a IDE PyCharm com Linux Embarcado

Preparando o Eclipse para microcontroladores AVR

Introdução ao Makefile

 

 

Referências

 

http://www.pydev.org/
http://www.pydev.org/updates/
https://www.eclipse.org/
https://www.digitalocean.com/community/tutorials/how-to-use-ssh-to-connect-to-a-remote-server-in-ubuntu
http://fahrenkrug.net/2017/05/08/6/
Fonte Figura Principal
Logo Raspberry

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Caio Cesar Bosco
27 anos, Paulista, Engenheiro Eletrônico formado pela Escola de Engenharia de São Carlos (USP). Desenvolve Firmware para Arquiteturas de 8 bits. Conhece/Trabalha/Tem Interesse em Sistemas Eletrônicos sob à Ótica de Baixo Nível.

Deixe um comentário

avatar
 
  Notificações  
Notificar