No momento, estou travado com o problema de depuração remota do meu aplicativo com gdb. Gostaria de ter o capacidade de anexar a um processo remoto e usar IDE “depuração visual (eu uso Visual Studio Code).

O O problema é que o IDE pode se conectar a um processo local por meio de seu pid, o que não é realmente útil. Portanto, se eu solicitar o encaminhamento de porta local, posso usar a porta local para encaminhar a conexão, o que não é realmente o que eu quero.

É possível fazer algo como “encaminhamento pid”, ou seja, eu defino alguns pid que na verdade é um processo remoto.

Comentários

  • Você ' não estou dizendo qual IDE está usando (e como ' não estou usando nenhum IDE, provavelmente não ' capaz de ajudá-lo). Mas você deve olhar para o gdbserver – que ' é um pequeno programa que pode ser executado em um sistema integrado / restrito e você pode se conectar a ele com o ' fat debugger ' de uma máquina mais poderosa.
  • @UncleBilly eu fiz. " Eu uso o código do Visual Studio ". Infelizmente, está documentado que ele não oferece suporte à depuração remota …
  • @UncleBilly gdbserver parece ser o que eu queria. Obrigado.

Resposta

Como Tio Billy diz, uma boa maneira de fazer isso é usar os recursos de depuração remota do GDB. Isso funciona executando um “pequeno” depurador no host que executa o processo que você deseja depurar e conectando-se a ele usando gdb do host que executa seu ambiente de desenvolvimento. Visto que muitos IDEs (incluindo o código VS) suportam depuração usando gdb, você pode obter o conforto de seu ambiente de desenvolvimento direcionado a processos em execução em qualquer lugar, incluindo em outras plataformas.

No host que executa o processo que você deseja depurar, você precisa instalar gdbserver (geralmente copiando um binário estático) e executá-lo; por exemplo:

gdbserver --attach :9953 ${pid} 

irá listar na porta 9953 e anexar ao id de processo fornecido. Você pode especificar uma variedade de maneiras de se conectar ao servidor (portas seriais, endereços IP …) e executar um comando para depurar ou anexar a um processo em execução ou até mesmo executar um “servidor de depuração” sem processo específico .

No host com seu ambiente de desenvolvimento, você se conecta ao destino em gdb:

$ gdb ... (gdb) target remote <IP address>:9953 

Todo o resto funciona normalmente. gdb transferirá os arquivos de que precisa (bibliotecas, etc.) do destino remoto, mas para acelerar as coisas você pode apontar para uma cópia local dos arquivos. Ele usará fontes locais.

Isso funciona como você esperaria quando os dois hosts são iguais, mas também pode ser feito para funcionar com hosts diferentes, por exemplo, para depurar um programa Windows a partir de um sistema Linux ou, mais tipicamente, um programa executado em um pequeno sistema embarcado de uma plataforma de desenvolvimento maior.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *