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
9
A
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
- 1. Passaggio di unique_ptr alle funzioni
- 2. Passaggio alle funzioni lambda C++
- 3. Android: passaggio di riferimento alle funzioni AsyncTask
- 4. Passaggio delle strutture alle funzioni
- 5. Tracciamento delle chiamate alle proprietà implementate automaticamente
- 6. Cosa c'è di diverso tra le chiamate "Responsive" di AngularJS rispetto alle buone vecchie chiamate AJAX?
- 7. Angolare 2: passaggio dei dati alle rotte?
- 8. Accesso alle condivisioni di rete in chiamate di metodo Reflected
- 9. Eccezione con Stacktrace che contiene solo chiamate in libreria Java
- 10. Utilizzo di nullptr nelle chiamate alle funzioni API?
- 11. Le chiamate di sistema 'sync' e 'syncfs' sono associate alle chiamate 'fsync' di FUSE?
- 12. Passaggio dei dati di ricerca alle attività ricercabili
- 13. Funzione ambigua Chiamate alle classi di base C++
- 14. Risposta alle chiamate telefoniche Android dal PC tramite bluetooth
- 15. scarica libreria dinamica ha bisogno di due chiamate dlclose()?
- 16. Aggiornamento delle chiamate alle API Java Datastax non disponibili 3
- 17. Analisi statica .NET - Chiamate garantite alle funzioni in un programma
- 18. Come forzare GHC alle chiamate FFI in linea?
- 19. PowerShell - passaggio di percorsi calcolati con spazi
- 20. Creazione di chiamate nidificate per "eseguire" con la libreria Fabric di Python
- 21. Passaggio Silex app e richiesta alle classi controller
- 22. Passaggio della riga maggiore alle dimensioni principali della colonna
- 23. come accedere alle risorse in un progetto di libreria Android
- 24. Passaggio di dati con eventi
- 25. Risolutore di chiamate di chiamate C++
- 26. riferimenti di celle di passaggio alle funzioni del foglio di calcolo
- 27. Chiamate API di monitoraggio
- 28. Chiamate di metodi asincroni con Ruby come con Ajax
- 29. libreria con licenza LGPL
- 30. Come collegarsi automaticamente alle dipendenze della libreria condivisa
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'. –
Il problema si verifica con un particolare oggetto condiviso oppure è possibile creare un banale "test case" che illustra il problema? –
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