c++ eclipse gdb remote-debugging eclipse-cdt

Depuración remota de aplicaciones C++ con Eclipse CDT/RSE/RDT



gdb remote-debugging (5)

"depurar a través de" C ++ remote "Error: Programa no especificado (¿necesito el código local para eso?)"

Sí, porque los símbolos se cargan desde una copia local de código.

En la pestaña de depuración de este tipo de configuración de inicio, encontrará la configuración para el servidor y el puerto remotos. Use el nombre del equipo y el puerto que especificó cuando inició gdbserver.

AFAIK esto todavía no funcionará ya que gdb ejecutándose en su máquina de Windows local no soportará la depuración de los programas de Linux. Necesitará una compilación cruzada de gdb (configurado y compilado con host = mingw-o-something y target = linux).

Estoy peleando con Eclipse (en Windows) para conectarlo a mi caja de Linux y compilar y depurar el código C ++ de forma remota.

Lo que tengo trabajando:

  • CDT / RSE / RDT instalado (Eclipse Juno, CDT 8.1.2, PTP (RDT) 6.0.4, RSE 3.4)
  • rdt-server se ejecuta en el cuadro de Linux ( perl ./daemon.pl 4075 )
  • crear proyectos locales de C ++ (basado en Makefile)
  • compilar y depurar proyectos locales de C ++
  • crear proyectos remotos (usando la conexión "Linux" al servidor rdt)
  • compilar proyectos remotos (basado en Makefile)

Algunas cosas manuales que puedo hacer (sin Eclipse):

  • depuración "remota" de mis proyectos compilados: ssh mybox ''cd /path/to/project; gdb main'' ssh mybox ''cd /path/to/project; gdb main''
  • Inicie un gdbserver: ssh mybox ''cd /path/to/project; gdbserver fqdn:10000 main'' ssh mybox ''cd /path/to/project; gdbserver fqdn:10000 main''

Lo que no funciona: Depurar en Eclipse

  • depurar a través de la "aplicación C ++" Error: Programa no especificado (porque no tengo un código local)
  • depurar a través de "C ++ remoto" Error: Programa no especificado (¿necesito código local para eso?)
  • depurar mediante "C ++ attach" (Depurador: "gdbserver")
    • gdbserver ejecutándose en linuxbox
    • gdb no puede hablar con gdbserver (cygwin gdb 7.5, linux gdb / gdbserver 7.3); advertencia: la arquitectura rechazó la descripción proporcionada por el objetivo.
  • depurar a través de "C ++ attach" (Depurador: "gdb") intentará adjuntar a mis procesos de Windows.

Otras cosas que pueden causar problemas:

  • Estoy usando el binario ssh provisto con MSYS / Git (no en PATH )
  • Cygwin no está en PATH

Realmente me gustaría hacer la depuración remota en Eclipse para mis proyectos C ++. ¿Tiene alguna sugerencia de cómo proceder desde aquí?


Desafortunadamente, esta pregunta aún no dio como resultado la solución deseada. Sin embargo, podría interesarte cómo realmente "resolví" el problema:

Ahora estamos desarrollando directamente en las cajas de Linux, haciendo todo de forma remota. Configuramos usuarios de escritorio en las cajas de Linux e iniciamos sesión a través de VNC para ejecutar Eclipse y usarlo como front-end de gdb . Si bien VNC no es la mejor solución (quizás intentemos NX más adelante) esta solución nos libera de cualquier problema con gdbserver o RSE / RDT.


A partir de ahora (Luna M6), Eclipse CDT + RDT + RSE parece ser una cadena a la que le faltan algunos enlaces cuando se necesita:

  • Ejecute IDE en su PC de escritorio
  • Utilice la cadena de herramientas remota en el sistema de destino para construir en lugar de instalar una cadena de herramientas cruzada local
  • Automatice la depuración y ejecute para que se ejecute en el sistema remoto con un solo clic (inicie gdbserver, conéctelo y proporcione el resultado de la consola)

Estos requisitos son bastante comunes hoy en día con respecto a la abundancia de tableros ARM de Linux como Raspberry Pi y OLinuxino. Estas placas suelen tener recursos suficientes para ejecutar una cadena de herramientas, pero no lo suficiente como para proporcionar un entorno de escritorio remoto para ejecutar el IDE de forma remota.

Mi solución final: después de varios días de esfuerzo, finalmente renuncié a Eclipse CDT + RDT + RSE para NetBeans C / C ++ Remote Development Environment, que funciona como un encanto para mí.


Puede probar este complemento con Eclipse, para la versión de aplicación paralela aquí hay un enlace

Funciona bien en el desarrollo de la máquina de Windows para programar en Linux


Verificación de integridad con CLI

Antes de hacer nada, asegúrese de:

  • cross compila la aplicación correctamente y se ejecuta. No necesariamente necesitas hacer esto usando Eclipse.
  • conseguir que la depuración remota de GDB funcione correctamente desde la línea de comando

Esta respuesta supone que puedes hacerlo en la junta de desarrollo:

sudo apt-get install gdbserver gdbserver :1234 path/to/executable

Y en el host:

aarch64-linux-gnu-gdb / -ex "target remote board-hostname:1234" / -ex "file path/to/cross/compiled/executable" / -ex ''tb main'' / -ex c

y luego paso depurar todo correctamente.

Configuración de Eclipse

Probado en el host Ubuntu 16.04, Eclipse Oxygen 4.7.0 (descargado del sitio web), gdbserver 7.12, aarch64-linux-gnu-gdb 7.6.

He utilizado con éxito todos los siguientes métodos:

  • manual
  • automático
    • autenticación de contraseña
    • autenticación de clave pública

Manual

Con este método, debemos gdbserver en el destino antes de ejecutar la depuración en Eclipse.

Pro: dispensa la configuración de conexiones SSH a través de Eclipse para permitir que Eclipse

Con: tienes que gdbserver cada vez que se inicia la depuración. Esto podría ser superado si Eclipse entendiera gdbserver --multi , ¿pero no creo que lo haga?

Debido a su simplicidad, le recomiendo que obtenga este método trabajando primero.

Abra las configuraciones de depuración y luego cree una nueva "Aplicación remota de C / C ++".

Debajo de la pestaña "Principal":

  • seleccione el "Nombre", "Proyecto" y "Aplicación C / C ++" como es habitual para una depuración local

  • en el iniciador inferior, haga clic en "Seleccionar otro", marque "Usar configuración específica de la configuración" y elija "Iniciador de depuración remota manual de GDB (DSF)"

    Por qué hacemos esto: el gdbserver automático se conecta primero al tablero con SSH y lanza el gdbserver por usted.

Debajo de la pestaña "Depurador":

  • "Depurador GDB": el mismo que el utilizado por CLI en el host, aarch64-linux-gnu-gdb para este ejemplo

  • Subpestaña "Conexión": configure el nombre de host y el puerto como pasados ​​al host en la CLI ( board-hostname and 1234 )

Finalmente, ejecute manualmente gdbserver en el destino tal como lo hicimos desde la CLI:

gdbserver :1234 path/to/executable

e inicie el depurador de Eclipse normalmente.

gdbserver reiniciar gdbserver cada vez que finaliza el programa.

Automático con autenticación de contraseña

Este es el mejor método para las juntas de desarrollo, que han solucionado las contraseñas conocidas públicamente.

Se conecta al objetivo con SSH y una contraseña, y lanza gdbserver en el destino automáticamente cada vez, ¡lo cual es muy conveniente!

Target stdout gdbserver va a la ventana "Consola" de Eclipse, lo que reduce aún más el cambio de ventana.

En el conjunto de Eclipse:

Automático con clave pública

Muy similar a la autenticación con contraseña, excepto que debe ir a: "Conexión", "Nuevo", y elegir "Autenticación basada en clave pública"

Pros:

  • supera el "Almacenamiento seguro no pudo guardar la contraseña maestra" si tiene una clave privada encriptada (insegura, pero está bien para
  • para servidores, es probable que ya haya configurado la clave pública

Contras:

  • la configuración de la clave puede doler la primera vez
  • debe rehacer la configuración de la clave cada vez que se desborda el devboard

SSH puede conectarse sin una contraseña si usted:

Antes de utilizar este método, asegúrese de que sus claves autorizadas funcionen desde la línea de comandos, es decir, que ahora pueda hacer:

ssh user@host

sin escribir ninguna contraseña.

Cambiar el directorio de trabajo actual del proceso

¿Cómo establecer el directorio de trabajo actual del programa cuando se realiza una depuración remota con gdbserver Automatic Launcher en Eclipse CDT?