Come posso configurare Qt Creator e/o gdb in modo che durante il debug del mio programma utilizzando le librerie Qt il debugger eviti di passare ai file sorgente di Qt?Come evitare di accedere ai file sorgente della libreria durante il debug in Qt Creator con gdb?
risposta
È necessario disattivare l'auto-solib-add. Da un prompt di gdb normale è necessario digitare:
(gdb) set auto-solib-add off
In Qt Creator, sotto Opzioni-> Debugger-> Gdb è possibile specificare uno script di avvio Gdb. Crea un file con il comando "set auto-solib-add off" e poi imposta lo script di avvio Gdb su quel file.
non funzionerà con build statici, ovviamente (è nel nome auto-SOlib-add). –
aggiornamento dopo il commento precisazione:
In gdb è possibile specificare quali source directories are searched - se non li possa trovare, non sarà in grado di andare in loro.
Per fare in modo che gdb inserisca i file sorgente delle librerie qt deve sapere dove si trovano - è probabile che qt-creator stia dicendo a gdb dove si trovano quando avvia il debugger. Guardate intorno a qt-creator per lo script di avvio di gdb - potrebbero essere specificati lì.
Se non vengono specificati nello script di avvio ed è gdb trovare i file di origine su di essa la propria si dovrebbe essere in grado di modificare lo script di avvio gdb per cancellare tutte le directory con il comando directory
(vedi il link qui sopra per la sintassi ecc .)
si può anche essere in grado di visualizzare la console gdb andando a "Debug -> Viste -> gdb" per ottenere informazioni su quali fonti le directory si sta utilizzando con il comando show directories
in gdb, e deselezionando qualsiasi off manualmente se si desidera eseguire questa operazione caso per caso.
Ecco cosa penso Piotr vuole: hai una chiamata come foo (QVariant :: fromValue (MySuperClass (QString ("hi% 1"). Arg ("Andy")))). Quando si entra, il debugger dovrebbe saltare arg, il costruttore QString, la chiamata fromValue e inserire solo MySuperClass e foo. AFAIK, Qt Creator non può farlo. C'è stata una discussione su come saltare il macchinario sig/slot quando si passa attraverso il codice, ma non so se l'hanno implementato. – rpg
Andy, quello che stai descrivendo si chiama STEP OUT e STEP OVER ed è sempre stato possibile in quasi tutti i debugger. Non voglio ** manualmente ** uscire/sopra il codice sorgente di Qt. Voglio che il debugger lo scavalchi ** automaticamente **.rpg ha ragione nel suo commento e descrive la funzione che stavo chiedendo. –
La funzione desiderata (come descritto da rpg) non è disponibile da GDB
e IMHO sarebbe difficile da utilizzare se fosse implementata.
Una funzione simile, ma più semplice da usare, fstep
viene proposta per GDB
. Dato:
foo((string("Hello") + string(" World!)).c_str());
il fstep
saltato tutte le chiamate sulla linea corrente, tranne l'ultimo (saltando quindi costruttori stringa, operator+()
e c_str()
, e passo solo in foo
).
Anche questo non è stato implementato, ma probabilmente sarà tra un paio di mesi (è molto utile per il debug di C++
).
Nel frattempo, si può approssimare la funzione impostando un punto di interruzione temporanea:
(gdb) list
1 #include <string>
2 #include <iostream>
3 using namespace std;
4
5 void foo(const char *s)
6 {
7 cout << s << endl;
8 }
9
10 int main()
11 {
12 foo((string("Hello") + string(" World!")).c_str());
13 return 0;
14 }
(gdb) b main
Breakpoint 2 at 0x8048901: file t.cc, line 12.
(gdb) run
Breakpoint 1, main() at t.cc:12
12 foo((string("Hello") + string(" World!")).c_str());
(gdb) tb foo
Breakpoint 3 at 0x80488ca: file t.cc, line 7.
(gdb) c
foo (s=0x804a1f4 "Hello World!") at t.cc:7
7 cout << s << endl;
(gdb) q
Cosa ne pensi della proposta di Andy di rimuovere/nascondere i file sorgente della libreria? –
Puoi provarlo, ma non penso che ti farebbe del bene: GDB continuerà comunque a svolgere le funzioni che non desideri, semplicemente non mostrerà la fonte per loro. Probabilmente è peggio di quello che hai iniziato. Inoltre, se si è su una piattaforma ELF (ad esempio Linux), è necessario rimuovere effettivamente le intestazioni delle librerie - il compilatore incorpora il percorso completo nel file eseguibile (IOW, lo script di avvio GDB potrebbe rivelarsi inutile). –
@Employed: è 2012 e fstep non fa ancora parte di GDB. C'è qualche altra alternativa? (O una patch che potrei applicare ai sorgenti di gdb) Questo è davvero un must per lo sviluppo del C++. – nimrodm
- 1. Accesso alla console gdb in Qt-Creator
- 2. Modalità debug in esecuzione in Qt Creator
- 3. Debug di asserzioni in Qt Creator
- 4. Libreria di debug di Rust con GDB
- 5. Nessun file di risorse in Qt Creator
- 6. Visualizzazione della versione estesa della sorgente durante il debug
- 7. Come eseguire il debug della sorgente JDK
- 8. Utilizzo di una libreria statica in Qt Creator
- 9. Qt Creator Aggiunta di libreria esterna (ancora: Impossibile aprire il file di inclusione: 'GL/glew.h')
- 10. non possono recuperare l'output di debug in Qt Creator
- 11. Utilizzando cmake con Qt Creator
- 12. Come impedire a GDB di caricare il simbolo di debug per una (grande) libreria?
- 13. Setup git in Qt Creator
- 14. gcc/gdb: come incorporare il percorso assoluto al file sorgente nelle informazioni di debug?
- 15. Avviso linker LNK4099 con QT Creator
- 16. Utilizzo della documentazione automatica della mia funzione con Qt Creator?
- 17. Compilare un file in QT Creator
- 18. Come condividere il passo di costruzione in Qt Creator
- 19. Promozione di widget in Qt Creator
- 20. Come ottenere Qt 5.0 lavorare con Qt Creator 2.5.2?
- 21. Collegamento con una lib di debug/release con qmake/Qt Creator
- 22. problema con l'output dell'applicazione debug in gdb
- 23. Eclipse CDT: 'impossibile trovare un file sorgente' durante il debug
- 24. Ingresso console con Qt Creator
- 25. Come utilizzare libcurl su Qt Creator con MSVC2012 come compilatore
- 26. Come posso messaggi qDebug durante il debug in QtCreator
- 27. Come utilizzare MinGW-64 con Qt Creator
- 28. debugger gdb più file sorgente
- 29. Debug incorporato di Qt 5.x - distribuire il binario spogliato?
- 30. Debug di bootloader con gdb in qemu
stesso problema per cdb, come gestirlo? – raidsan