Comment puis-je configurer Qt Creator et/ou gdb afin que, lors du débogage de mon programme à l'aide de bibliothèques Qt, le débogueur évite d'entrer dans les fichiers sources de Qt?Comment éviter d'entrer les fichiers source de la bibliothèque lors du débogage dans Qt Creator avec gdb?
Répondre
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éez un fichier avec la commande "set auto-solib-add off", puis définissez votre script de démarrage Gdb sur ce fichier.
ne fonctionnera pas avec la construction statique bien sûr (c'est dans le nom auto-SOlib-add). –
Mise à jour après la clarification de commentaire:
gdb vous pouvez spécifier quels source directories are searched - si elle ne peut pas les trouver, il ne sera pas en mesure d'aller en eux. Pour que gdb entre dans les fichiers source des bibliothèques qt, il doit savoir où elles se trouvent. Il est probable que qt-creator indique à gdb où elles se trouvent quand il lance le débogueur. Regardez autour de qt-creator pour le script de démarrage de gdb - ils peuvent être spécifiés ici. Si elles ne sont pas spécifiées dans le script de démarrage et que gdb trouve les fichiers sources seuls, vous devriez pouvoir 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 afficher la console gdb en accédant à "Debug -> Views -> Gdb" pour obtenir des informations sur les répertoires source qu'il utilise actuellement avec la commande show directories
dans gdb, et en désactivant manuellement si vous voulez le faire au cas par cas.
Voici ce que je pense que Piotr veut: vous avez un appel comme foo (QVariant :: fromValue (MySuperClass (QString ("salut% 1"). Arg ("Andy")))). En entrant dans, le débogueur doit ignorer arg, le constructeur QString, l'appel fromValue et entrer uniquement MySuperClass et foo. AFAIK, Qt Creator ne peut pas faire ça. Il y a eu une discussion sur le fait de sauter la machine à sous lorsque je passais en revue le code, mais je ne sais pas s'ils l'ont implémenté. – rpg
Andy, ce que vous décrivez s'appelle STEP OUT et STEP OVER et a toujours été possible dans presque tous les débogueurs. Je ne veux pas ** manuellement ** sortir/sur le code source de Qt. Je veux que le débogueur l'enjambe ** automatiquement **.RPG est juste dans son commentaire et il décrit la fonctionnalité que je posais à propos de. –
La fonctionnalité que vous souhaitez (comme décrit par rpg) n'est pas disponible à partir de GDB
, et à mon humble avis serait difficile à utiliser si elle était mise en œuvre. Une caractéristique semblable mais plus simple à utiliser fstep
est proposée pour GDB
. Étant donné:
foo((string("Hello") + string(" World!)).c_str());
le fstep
sauterait tous les appels sur la ligne actuelle, à l'exception du dernier (sauter ainsi les constructeurs à cordes, operator+()
et c_str()
et marcher seulement dans foo
).
Ceci n'a pas été implémenté non plus, mais probablement dans quelques mois (c'est très utile pour le débogage 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
Que pensez-vous de la proposition d'Andy de simplement supprimer/cacher les fichiers sources de la bibliothèque? –
Vous pouvez l'essayer, mais je ne pense pas que cela vous ferait du bien: GDB va encore entrer dans les fonctions que vous ne voulez pas, il ne montrera pas la source pour eux. On peut dire que c'est pire que ce que vous avez commencé. En outre, si vous êtes sur une plate-forme ELF (par exemple Linux), vous devrez supprimer les en-têtes de bibliothèque - le compilateur leur intégrera le chemin complet (IOW, modifier le script de démarrage de GDB s'avérera probablement futile). –
@Employed: Nous sommes en 2012 et fstep ne fait toujours pas partie de GDB. Il y a t'il d'autres solutions? (Ou un patch que je pourrais appliquer aux sources de gdb) C'est en effet un must pour le développement C++. – nimrodm
même problème pour CDB, comment faire face? – raidsan