Comment éviter d'entrer dans les fichiers source de la bibliothèque pendant le débogage dans Qt Creator avec gdb?

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

Question

Comment puis-je configurer Qt Creator et / ou gdb de sorte que lors du débogage de mon programme en utilisant les bibliothèques Qt le débogueur éviterait d'entrer dans les fichiers source de Qt?

Était-ce utile?

La solution

Vous devez désactiver l'auto-solib-add. A partir d'une invite de gdb normal, vous tapez:

(gdb) set auto-solib-add off

Dans Qt Creator, sous Options-> Debugger-> gdb vous pouvez spécifier un script de démarrage gdb. Créer un fichier avec la commande « set ajouter auto-solib-off » dans et puis définissez votre script de démarrage Gdb à ce fichier.

Autres conseils

La fonction que vous voulez (tel que décrit par rpg) ne sont pas disponibles à partir GDB, et à mon avis serait difficile à utiliser si elle était mise en œuvre.

similaire, mais plus simple à utiliser la fonction de fstep est proposé pour GDB. Compte tenu:

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

fstep sauterait tous les appels sur la ligne en cours, à l'exception du dernier (sauter ainsi les constructeurs à cordes, operator+() et c_str() et marcher seulement dans foo).

Cela n'a pas été mis en œuvre soit, mais probablement dans quelques mois (il est très utile pour le débogage de C++).

Dans le même temps, vous pouvez approcher la fonction en définissant un point d'arrêt temporaire:

(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

Mise à jour après la clarification de commentaires:

Dans gdb vous pouvez spécifier les répertoires source sont recherche. - si elle ne peut pas les trouver, il ne sera pas en mesure d'entrer dans les

Pour gdb à entrer dans les fichiers source des bibliothèques qt il doit savoir où ils sont - il est probable que qt-créateur raconte gdb où ils sont quand il lance le débogueur. Regardez autour de qt-créateur pour le script de démarrage gdb -. Ils pourraient être spécifiés là

Si elles ne sont pas spécifiées dans le script de démarrage et il est gdb trouver les fichiers source sur son propre, vous devriez être en mesure de modifier le script de démarrage de gdb pour effacer tous les répertoires avec la commande directory (voir le lien ci-dessus pour la syntaxe, etc. )

Vous pouvez également être en mesure d'afficher la console gdb en allant dans « Debug -> Vues -> Gdb » pour obtenir des informations sur les répertoires source, il utilise actuellement avec la commande show directories dans gdb, et pour nettoyer toutes éteindre manuellement si vous veulent faire au cas par cas.

Peut-être pas exactement une solution parfaite à cette question, mais peut-être que cela aiderait à exclure les répertoires où votre projet est non (ie. Bibliothèques 3ème partie, en-têtes système (comme STL), etc.). Si oui, jetez un oeil à https://stackoverflow.com/a/31629136/5155476 et https://stackoverflow.com/a/42721326/5155476 . Le premier vous permet de spécifier des répertoires (et tous les sous-répertoires) pour passer en pas à pas lors de l'exécution GDB (vous pouvez changer le jeu quand vous le souhaitez), mais il vous oblige à construire GDB. Ce dernier permet la même fonctionnalité, mais pré-réglée avant d'exécuter GDB, et ne nécessite pas la construction de GDB.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top