Come evitare di entrare file di origine della biblioteca durante il debug in Qt Creator con gdb?

StackOverflow https://stackoverflow.com/questions/1448426

Domanda

Come posso configurare Qt Creator e / o gdb in modo che durante il debug il mio programma utilizzando librerie QT il debugger eviterebbe di entrare in file sorgente di Qt?

È stato utile?

Soluzione

È 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. Creare un file con il "set di auto-solib-off aggiungere" il comando in esso e quindi impostare lo script di avvio Gdb a quel file.

Altri suggerimenti

La funzione che si desidera (come descritto da rpg) non è disponibile da GDB, e secondo me sarebbe difficile da usare se fosse attuata.

Una caratteristica fstep simile, ma più semplice da usare è proposto per GDB. Dato:

foo((string("Hello") + string(" World!)).c_str());

il fstep avrebbe saltato tutte le chiamate sulla linea corrente, tranne l'ultimo (saltando quindi costruttori stringa, operator+() e c_str(), e intensificare solo in foo).

Questa non è stata attuata sia, ma probabilmente sarà in un paio di mesi (è molto utile per il debug 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

Aggiornamento dopo il commento precisazione:

In gdb è possibile specificare quali directory di origine sono cercato -. se non li possa trovare, non sarà in grado di andare in loro

Per gdb da entrare i file di origine delle librerie Qt si deve sapere dove si trovano - è probabile che qt-creatore sta dicendo gdb dove si trovano quando si lancia il debugger. Guardatevi intorno qt-creator per lo script di avvio gdb -. Che potrebbero essere specificati in 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 eventuali 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 su "Debug -> Viste -> Gdb" per ottenere informazioni su quali fonti le directory si sta utilizzando con il comando show directories in gdb, e deselezionando qualsiasi fuori manualmente se si vuole fare questo su una base caso per caso.

Forse non è esattamente una soluzione perfetta a questo problema, ma forse sarebbe utile per escludere le directory in cui il progetto è non (es. Biblioteche 3rd party, le intestazioni di sistema (come STL), ecc). Se è così, date un'occhiata al https://stackoverflow.com/a/31629136/5155476 e https://stackoverflow.com/a/42721326/5155476 . Il primo permette di specificare le directory (e tutte le sottodirectory) per saltare quando si passa durante l'esecuzione di GDB (in modo da poter cambiare il set in qualsiasi momento), ma si richiede di costruire GDB. Quest'ultimo permette la stessa funzionalità ma pre-impostata prima di eseguire GDB, e non richiede la costruzione di GDB.

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