Debugging con gdb, qualsiasi codice C++ che usi STL/boost è ancora un incubo. Chiunque abbia usato gdb con STL lo sa. Ad esempio, consultare le esecuzioni di esempio di alcune sessioni di debug nel codice here.Debug delle best practice per C++ STL/Boost con gdb
Sto cercando di ridurre il dolore raccogliendo punte. Puoi commentare i suggerimenti che ho raccolto di seguito (in particolare quelli che hai utilizzato e le eventuali modifiche che consiglieresti su di essi) - Ho elencato i suggerimenti in ordine decrescente di tecnicità.
- C'è qualcuno che utilizza "Stanford GDB STL utils" e "UCF GDB utils"? Esistono alcuni programmi di questo tipo per le strutture dati di boost? Gli strumenti di cui sopra non sembrano essere utilizzabili in modo ricorsivo, ad esempio per stampare il vettore di un boost :: shared_ptr in modo leggibile all'interno di un comando.
- Scrivi il tuo file .gdbinit. Includere, ad esempio, abbellimenti correlati a C++, elencati nella parte inferiore dei programmi di utilità GDB di UCF.
- Utilizzare la libreria STL/Boost selezionata/debug, come STLport.
- utilizzare la registrazione (ad esempio come descritto here)
Aggiornamento: GDB ha un new C++ branch.
chiesto e ha risposto, ma gdb 7 ha molto migliore supporto per i contenitori STL - la nostra installazione out-of-the-box include il supporto per la stampa come "$ 4 = std :: vector of length 4, capacity 4 = {0, 2, 4, 888}". Non ho visto cosa fa con tipi complessi o altri contenitori, ma sembra un enorme miglioramento. Vedi [questa pagina] (http://sourceware.org/gdb/wiki/STLSupport) per maggiori dettagli ... –
@RobI Grazie! Tuttavia, con mia grande sofferenza ho trovato che il supporto basato su Python manca ancora quando uso i contenitori di puntatori boost, cosa che faccio spesso. GDB continua semplicemente a lamentarsi e non a stampare i contenuti. –