Pregunta

Mi pregunta es acerca de la depuración remota una aplicación en una incrustado procesador arm usando gdb/gdbserver.

Puedo depurar la aplicación en sí, pero la aplicación se vincula dinámicamente una biblioteca compartida que se implementa en la casa de protocolo de comunicaciones.Quiero ser capaz de establecer puntos de interrupción dentro de la biblioteca compartida funciones, a fin de tratar de averiguar algo de detección de dispositivos de problemas.

Me he asegurado de que la biblioteca está compilado con los símbolos de depuración y se carga por gdb en el lado del host, me puede hacer una lista de funciones dentro de la biblioteca e incluso establecer los puntos de corte, pero tan pronto como intente ejecutar la aplicación me sale un mensaje de error para el efecto de:

Cannot insert breakpoint X.
Error accessing memory address : Input/output error.

donde X es el número de punto de interrupción en gdb y es una dirección mucho a los pequeños para que sea válido.
Estoy usando la nueva biblioteca, en tanto el objetivo y el host de la máquina, sino a través de mount -o bind newlib oldlib en el destino desde un punto de montaje nfs.
¿Alguien tiene una idea acerca de lo que podría estar equivocado?Gracias de antemano.

¿Fue útil?

Solución

Conjetura:se ha cargado la biblioteca compartida en el host GDB en la dirección incorrecta.

En lugar de cargar explícitamente en GDB, el uso de "set stop-on-solib-event on", espere a que la biblioteca se carga (info shared le dirá lista actual de las bibliotecas cargadas), y entonces establecer los puntos de interrupción.

Otros consejos

Veo esta pregunta es a partir de 2009, pero las respuestas actuales están fuera de fecha, por lo que aquí es una actualización:

@Employed Rusia sugirió que debe utilizar stop-on-solib-event. Esto ya no es verdad; NDK R8d apoya los puntos de interrupción pendientes en solibs todavía-ser cargados a.

@Brent Piddy dice que stop-on-solib-event no funciona con gdbserver. Esto ya no es menos cierto ya que al menos R8C. Mi empresa tiene un producto que se basa en este comportamiento NDK del BGF, estaríamos en grandes problemas sin él.

Utilice el siguiente comando para establecer puntos de interrupción en espera de que se resolverá después de cargar la biblioteca de objetos compartidos

set breakpoint pending on

Por desgracia no se puede usar "set-on-parada solib evento paralelo sobre" gdbserver para la depuración remota desde gdbserver no reconoce / enviar eventos solib. He tenido que acaba de emitir un conjunto solib-search-ruta o conjunto de comandos para obtener sysroot GDB para cargar todos los símbolos de bibliotecas compartidas después de alcanzar un punto de interrupción en la principal.

Ejecutar hasta main y luego set solib-search-path .

Si no, gdbserver se detiene en el cargador dinámico, antes de que se cargan las bibliotecas. En main, deben estar preparados para GDB.

Más detalles: Depuración de bibliotecas compartidas con gdbserver

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top