Actualmente estoy atascado con el problema de depuración remota de mi aplicación con gdb
. Me gustaría tener el capacidad de adjuntar a un proceso remoto y utilizar la depuración visual de IDE
«(yo uso Visual Studio Code
).
El El problema es que el IDE se puede adjuntar a un proceso local mediante su pid
que no es realmente útil. Entonces, si solicito el reenvío del puerto local, podría usar el puerto local para reenviar la conexión, que de nuevo no es realmente lo que quiero.
¿Es posible hacer algo como «reenvío pid», es decir, configuré algunos div id = «fac3326e75″>
que en realidad es un proceso remoto.
Comentarios
- Usted ' no estoy diciendo qué IDE está usando (y como yo ' no estoy usando ningún IDE, probablemente no ' capaz de ayudarte). Pero debería buscar en gdbserver: ese ' es un pequeño programa que podría ejecutarse en un sistema integrado / restringido, y podría conectarse a él con ' fat depurador ' de una máquina más poderosa.
- @UncleBilly Lo hice. " Utilizo Visual Studio Code ". Desafortunadamente, está documentado que no admite la depuración remota …
- @UncleBilly gdbserver parece que es lo que quería. Gracias.
Responder
Como tío Billy dice, una buena manera de hacer esto es usar las capacidades de depuración remota de GDB. Esto funciona ejecutando un depurador “pequeño” en el host que ejecuta el proceso que desea depurar y conectándose a él usando gdb
desde el host que ejecuta su entorno de desarrollo. Dado que muchos IDE (incluido VS Code) admiten la depuración mediante gdb
, puede obtener la comodidad de su entorno de desarrollo dirigido a procesos que se ejecutan en cualquier lugar, incluso en otras plataformas.
En el host que ejecuta el proceso que desea depurar, debe instalar gdbserver
(a menudo copiando un binario estático) y ejecutarlo; por ejemplo:
gdbserver --attach :9953 ${pid}
aparecerá en el puerto 9953 y se adjuntará al ID de proceso dado. Puede especificar una variedad de formas de conectarse al servidor (puertos serie, direcciones IP …) y ejecutar un comando para depurar o adjuntar a un proceso en ejecución, o incluso ejecutar un «servidor de depuración» sin un proceso específico .
En el host con su entorno de desarrollo, se conecta al destino dentro de gdb
:
$ gdb ... (gdb) target remote <IP address>:9953
Todo lo demás funciona como de costumbre. gdb
transferirá los archivos que necesita (bibliotecas, etc.) desde el destino remoto, pero para acelerar las cosas, puede apuntar a una copia local de los archivos. Utilizará fuentes locales.
Esto funciona como es de esperar cuando los dos hosts son iguales, pero también se puede hacer que funcione con diferentes hosts, por ejemplo para depurar un programa de Windows de un sistema Linux, o más típicamente, un programa que se ejecuta en un pequeño sistema integrado desde una plataforma de desarrollo más grande.