Debug di core files in ambienti crosscompilati
From Ability
Revision as of 16:14, 10 July 2015 by 80.21.33.250 (Talk) (Created page with "Configurazione di GDB per l'analisi automatica dei core file in ambienti crosscompilati per ARM * Copiare il filesystem crosscompilato per ARM in 'release/'. Questo deve nece...")
Configurazione di GDB per l'analisi automatica dei core file in ambienti crosscompilati per ARM
- Copiare il filesystem crosscompilato per ARM in 'release/'. Questo deve necessariamente contenere i binari non strippati o in alternativa i simboli di debug.
- Creare il file per inizializzare gdb in relazione alla release in 'release/gdbinit.txt'. Sostituire alla variabile "$sysroot_release" la directory che contiene il filesystem.
# Setting della root del filesystem set sysroot $sysroot_release # Preporre alle path la root del filesystem set solib-absolute-prefix $sysroot_release set substitute-path /usr/src/debug $sysroot_release/usr/src/debug # Specificare la posizione delle librerie set solib-search-path $sysroot_release/usr/lib/ # Specificare la posizione dei simboli di debug, in caso siano separati dai binari #set debug-file-directory $sysroot_release/usr/lib/debug
- Può essere utile aggiungere in coda a 'release/gdbinit.txt' del codice per stampare in maniera leggibile le strutture dati standard C++, come in https://gist.github.com/4528704 .
- L'inizializzazione fatta è sufficiente per eseguire gdb per analizzare interattivamente il corefile di esempio "core.foo" generato al crash del binario "/usr/bin/foo".
$ arm-none-linux-gnueabi-gdb "releases/usr/bin/foo" "cores/core.foo" -ix "releases/gdbinit.txt"
- Se si desidera una analisi per estrarre automaticamente stack trace e altre informazioni di debug, creare il file 'release/gdbrc.txt' con i comandi da eseguire in gdb.
# Mostra le librerie linkate dal binario e la disponibilità dei debug symbols echo \n=== Info sharedlibrary\n info sharedlibrary # Mostra i thread in secuzione al momento del crash echo \n=== Info threads\n info threads # Mostra il sommario del backtrace echo \n=== Backtrace\n backtrace # Mostra il backtrace completo su tutti i thread echo \n=== Thread apply all backtrace full\n thread apply all backtrace full # Mostra il contenuto dei registri al momento del crash echo \n=== Info registers\n info registers # Disassembla la funzione in esecuzione al momento del crash echo \n=== Disas\n disas
- Eseguire gdb in modo da analizzare il core file automaticamente e salvare l'output in "analysis/core.foo.analysis.txt" senza bisogno di iterazione con l'utente.
$ arm-none-linux-gnueabi-gdb "releases/usr/bin/foo" "cores/core.foo" -ix "releases/gdbinit.txt" -x "releases/gdbrc.txt" -batch > "analysis/core.foo.analysis.txt"