2011-12-15 9 views
9

Ho una domanda generale gdb/gdbserver. Sto provando a eseguire il debug di un'applicazione incorporata di linux di braccio utilizzando gdb sull'host e gdbserver sulla destinazione remota. Posso scorrere linee di codice all'inizio del main. Tuttavia, gdb (o gdbserver) sembra essere perso dopo le chiamate alle funzioni di libreria condivisa. Anche quando si imposta un punto di interruzione dopo la chiamata e l'utilizzo continua, non raggiunge mai il punto di interruzione. So che non ho simboli nelle librerie condivise e davvero non mi interessa entrare in loro. Non dovrei essere in grado di scavalcare la libreria in gdb con successo anche senza i simboli nelle librerie condivise o almeno continuare con il prossimo breakpoint? O questo indica un diverso tipo di problema?Passaggio alle chiamate di libreria con gdb/gdbserver

+0

Avete prove da un'altra fonte che indica che si sta eseguendo l'istruzione (s) presso il punto di interruzione? Invece di visualizzare la sorgente di alto livello, guarda allo smontaggio per vedere alcune delle interpretazioni di 'gdb'. –

+0

Il problema si verifica con un particolare oggetto condiviso oppure è possibile creare un banale "test case" che illustra il problema? –

+0

Ci scusiamo per il lungo tempo di risposta. Il codice funziona correttamente sul dispositivo incorporato. È solo gdb o gdbserver che si sta perdendo. Una volta che viene effettuata una chiamata a una funzione di libreria, perde traccia del suo posto nel programma e non può mai riprendere il controllo. Non penso che sia necessariamente tutta la funzione di libreria dal momento che colpisce uno, open(), che non può essere passato in anticipo nell'esecuzione. – Jim

risposta

1

I punti di interruzione per indirizzo, piuttosto che per simbolo, sono a volte più affidabili.

Prova questo:

 
(gdb) x/i my_func 
0x12345678 <my_func> ... 
(gdb) break *0x12345678 
Problemi correlati