debug leggero su Linux integrato
-
11-09-2019 - |
Domanda
Sto sviluppando un'applicazione che gira su uno SBC piccola basato su Linux (~ 32 MB di RAM). Purtroppo, la mia app è recentemente diventato troppo grande per l'esecuzione con GDB più. Qualcuno sa di qualsiasi bene, i metodi di debug leggeri che posso utilizzare in Linux embedded? Pur essendo in grado di visualizzare stack trace di un thread sarebbe estremamente utile.
Vorrei ricordare che questa applicazione è scritto in C ++ e corre più thread, così gdbserver è un no-go in quanto non funziona con le applicazioni multithreaded.
Grazie in anticipo,
Maha
Soluzione
gdbserver sicuramente funziona con applicazioni multi-threaded, sto lavorando su un progetto integrato in questo momento con> 25 thread e usiamo gdbserver tutto il tempo.
info threads
elenca tutti i thread del sistema
thread <thread number from info threads>
interruttori a quel filo di esecuzione.
thread apply XXX <command>
Esegue sul filo designato da XXX, che può anche essere 'tutto'. Quindi, se volete la traccia di ritorno da tutti i thread in esecuzione fare
thread apply all bt
Una volta entrato nel flusso di esecuzione di un dato thread tutti i comandi tipici lavorano come farebbero in un unico processo filettato.
Altri suggerimenti
Ho sentito parlare di persone che fanno hack come eseguire l'applicazione in un emulatore come QEMU e quindi eseguendo GDB (o cose del genere valgrind) su questo. Suona doloroso, ma se funziona ....
Vuoi saperne ovunque con libunwind (per ottenere tracce dello stack) e la registrazione in stile printf?
la stampa porta seriale è il peso più leggero che posso pensare ~~~ Facilmente visto in un PC host, e il codice di peso semplice e leggero all'interno della vostra app ~~
Se non si dispone di una porta seriale, una volta che abbiamo utilizzato una porta GPIO e simulato una porta seriale di usarlo. Ha funzionato perfettamente, ma era un po 'lento :-( ~~~
C'è un motivo per cui avete costruito il proprio debugger? Sto sviluppando un sistema Linux utilizzando un processore ARM (AT91SAM926x) e che stiamo usando entrambi compilatore e debugger da CodeSourcery. Non credo di aver rilasciato una versione con GDB 7 ancora, ma sto debug di applicazioni multithread C ++ utilizzando lo strumento gdbserver senza problemi.
gdbserver effettivamente funziona con le applicazioni multithreaded. Tuttavia si ha bisogno di compilare un debugger bersaglio croce per il vostro ospite per farlo funzionare con il vostro gdb di destinazione.
Si veda questo articolo per una descrizione dettagliata di come farlo: