2011-12-15 5 views
9

Tengo una pregunta general de gdb/gdbserver. Estoy intentando depurar una aplicación incorporada de arm linux utilizando gdb en el host y gdbserver en el destino remoto. Puedo recorrer las líneas de código al principio de main. Sin embargo, gdb (o gdbserver) parece perderse después de las llamadas a funciones de biblioteca compartidas. Incluso cuando configuro un punto de interrupción después de la llamada y uso continuar, nunca llega al punto de interrupción. Sé que no tengo símbolos en las bibliotecas compartidas y realmente no me importa entrar en ellos. ¿No debería ser capaz de pasar las llamadas a la biblioteca en gdb con éxito incluso sin que los símbolos estén en las bibliotecas compartidas o al menos continuar al siguiente punto de interrupción? ¿O esto indica un tipo diferente de problema?Repasar llamadas de biblioteca con gdb/gdbserver

+0

¿Tiene pruebas de otra fuente que indica que se está ejecutando la instrucción (s) en el punto de ruptura? En lugar de ver la fuente de alto nivel, mira el desmontaje para ver más allá de la interpretación de 'gdb'. –

+0

¿El problema ocurre con un objeto compartido particular, o puede crear un "caso de prueba" trivial que ilustre el problema? –

+0

Perdón por el largo tiempo de respuesta. El código se está ejecutando correctamente en el dispositivo incorporado. Es solo gdb o gdbserver lo que se está perdiendo. Una vez que se realiza una llamada a una función de la biblioteca, pierde el control de su lugar en el programa y nunca puede recuperar el control. No creo que sea necesariamente toda la función de la biblioteca, ya que toca uno, abrir(), que no puede pasar al principio de la ejecución. – Jim

Respuesta

1

Los puntos de interrupción por dirección, en lugar de por símbolo, a veces son más confiables.

Prueba esto:

 
(gdb) x/i my_func 
0x12345678 <my_func> ... 
(gdb) break *0x12345678 
Cuestiones relacionadas