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

È stato utile?

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:

remoto cross-bersaglio con GDB e gdbserver

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top