gdb, c++ et difficultés d'utilisation - C++ - Programmation
Marsh Posté le 21-07-2004 à 10:39:20
utiliser une surcouche au lieu de se la péter avec un truc inutilisable ?
Marsh Posté le 21-07-2004 à 11:33:33
c'est à dire ?
si c'est une surcouche à GDB dont tu parles, j'ai bien essayé avec kdevelop, mais sans succès, donc je suis repassé sur le gdb en ligne de commande pour tenter de voir ce qui ne marchait pas
Marsh Posté le 21-07-2004 à 18:50:42
j'ai testé en utilisant ddd, ça me fait exactement les mêmes problèmes
Marsh Posté le 21-07-2004 à 18:53:59
Tu compiles avec -ggdb3 ou au moins -g ?
Marsh Posté le 21-07-2004 à 19:15:41
-g, mais je vais ressayer avec ggdb3
les résutats sont variables en fait, par exemple, ça s'arrete bien sur les breakpoints du main sans broncher
Marsh Posté le 21-07-2004 à 20:10:07
Tu es sûr que le source est bien en accord avec l'exécutable ? Il arrive souvent que tes sources soient plus récents que tes binaires, et ça fout la merde, mais gdb te l'indique normalement. Mais quand même, je conseillerais une recompilation complète.
Marsh Posté le 21-07-2004 à 20:23:11
oui, ça je suis sûr, vu que j'ai recompilé 500 fois les choses
Marsh Posté le 22-07-2004 à 10:48:12
il te faut une version de Qt avec des symboles de débuggages également.
Marsh Posté le 22-07-2004 à 12:21:39
Taz a écrit : il te faut une version de Qt avec des symboles de débuggages également. |
hum oui et non
sur mes fonctions internes, quand je définis un constructeur de classe dérivée, y'a tout les symboles qu'il faut pour s'arreter à la bonne ligne
Marsh Posté le 22-07-2004 à 12:22:39
toutes façons, tu mets un break point avec le numéro de la ligne (ou tu cliques carrément dessus) et voilà ... je comprends pas ou est ton problème
Marsh Posté le 22-07-2004 à 13:19:44
il me semble que tu peux aussi specifier le breakpoint par la methode:
b
QPushButton::resize
c
Marsh Posté le 22-07-2004 à 14:34:21
Taz a écrit : toutes façons, tu mets un break point avec le numéro de la ligne (ou tu cliques carrément dessus) et voilà ... je comprends pas ou est ton problème |
j'essaye de te dire que tout simplement : " ça marche pas "
le programme ne s'arrete pas sur le breakpoint, bien que je voit le débogueur qui dit l'avoir mis.
c'est ce que j'essaye de dire depuis le 1er post...
Marsh Posté le 22-07-2004 à 14:43:50
c'est pas possible. soit tu as mal compilé, soit tu as mal mis ton break point. est-ce que tu arrives à breaker ou que ce soit ?
Marsh Posté le 22-07-2004 à 15:24:12
bein écoute, je sais pas quoi te dire moi non plus...
par exemple, sur les fonctions, ça breake bien sur le constructeur de ma classe
breakpoint que j'ai setté avec: b 'toto::toto'
en laissant gdb déterminer l'endroit, il le règle bien
par contre, le breakpoint setté par numéro de ligne dans ce même constructeur, lui il est pas respecté...
Marsh Posté le 22-07-2004 à 15:47:20
t es bien sur que les fichiers que tu vois sont bien ceux de la version du programme que tu debug?
t as jamais remarquerun decalage dans les numero de ligne par exemple?
et tu utilisa la bonne syntaxe pour spevifier un point d'arret connaissant le numero de ligne?
Marsh Posté le 22-07-2004 à 15:54:10
normalement, j'en suis sûr et certain, je suis plus à ça près, une fois de plus, je reprendrais depuis le début en nettoyant toutes les sources des lignes identations superflues, et make cleanant en profondeur...
Marsh Posté le 23-07-2004 à 09:12:45
Tu évites de mettre plusieurs instructions par ligne, hein ?
(genre tu passes une copie de ton code à l'indenteur artistic style)
Tu évites les macros aussi (à remplacer par des fonctions inline) ?
Tu as suffisamment de mémoire pour faire tourner en debug ?
Tu utilises bcp de templates ?
Si tu réponds oui aux 3 premières questions et non à la 3e, je ne vois pas de raison pour que gdb perde les pédales. Jette un oeil aux bugs répertoriés.
Marsh Posté le 23-07-2004 à 10:36:30
el muchacho a écrit : Tu évites de mettre plusieurs instructions par ligne, hein ? |
Il y a peut être un ou deux endroits ou y'a 2 instructions ( faut que je vérifie), mais c'est pas là que je mets mes breakpoits).
el muchacho a écrit : |
Zéro macro perso, homi celles qui sont inhérentes à Qt
el muchacho a écrit : |
512 Mo, donc ça va
el muchacho a écrit : Tu utilises bcp de templates ? |
Juste un type de template, fourni par Qt.
En fait, par exemple, si je lui dit de breaker à la l'implémentation d'un constructeur de classe, en donnant le nom de la fonction, ça breake bien.
Si je lui donnne la ligne correspondante, ça marche bien.
Ce qui est étrange, c'est que j'ai testé sur un sample de code et que ça marche nickel, mais pour l'appli Qt, ça veut plus marcher. Donc je continue de chercher ce qui pourrait merder.
Marsh Posté le 21-07-2004 à 10:35:47
je rencontre quelques difficultés à utiliser gdb avec le c++ ( je suis en phase d'apprentissage, il est probable que certaines méthodes m'échappent )
==> comment placer un breakpoint sur une méthode de la classe mère pour un objet dérivé ?
Par exemple, Qt est fortement orienté objet, et un QPushButton hérite de sa classe mère QWidget la méthode resize
comment pouvoir dire à gdb de poser un breakpoint sur
QPushButton::resize ?
(sans dire de faire un breakpoint sur QWidget::resize ? qui inclurait des objets ne m'intéressant pas )
====> préciser un breakpoint par un numéro de ligne ne semble pas toujours marcher
j'ai peut etre oublié de faire une manipulation, mais par exemple, pour stopper dans une méthode de classe, je précise un numéro de ligne, mais le programme ne se stoppe pas sur le breakpoint
des idées de solutions à mes problèmes
par avance, merci
---------------
Bitcoin, Magical Thinking, and Political Ideology