8
votes

GDB: Réglage des erreurs Point de rupture dans les fonctions de la classe de modèle dans les fichiers d'en-tête

J'ai utilisé deux versions différentes de GDB, les deux posent des problèmes dans le code suivant:

Code coupé dans myfile.h code>: p> xxx pré>

GDB 7.1: P>

uname -a
Linux ... 2.6.9-67.ELsmp #1 SMP Fri Nov 16 12:49:06 EST 2007 x86_64 x86_64 x86_64 GNU/Linux

file /usr/bin/gdb   #### GDB 6.3
/usr/bin/gdb: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.4.0, dynamically linked (uses shared libs), stripped

file ~/local/bin/gdb  #### GDB 7.1
/home/user/local/bin/gdb: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.4.0, dynamically linked (uses shared libs), not stripped

file /path_to_exec/exec
/path_to_exec/exec: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.4.0, dynamically linked (uses shared libs), not stripped


1 commentaires

La base de code est grande et fortement modérée, la reproduction de la reproduction du bug pourrait être difficile :(. Par conséquent, tous les conseils pour réduire le problème sont les bienvenus.


3 Réponses :


0
votes

Je ne suis d'aucun autre débogueur de Linux, mais je n'ai jamais vécu de tels problèmes que vous avez expliqué.

Vous avez formulé votre question vraiment sympa (vous avez donc probablement fait), mais avez-vous compilé vos sources avec des symboles de débogage?

Modifier

BTW Je n'ai pas essayé GDB 7.1 - Seulement 6.8 Version. Si vous pensez que c'est très buggy, essayez d'utiliser la dernière version de la version 6.


4 commentaires

Oui, j'ai utilisé -g drapeaux. De plus, malheureusement, je continue à rencontrer deux types de problèmes avec GDB (1) points de rupture dans les fichiers d'en-tête 2) Modèles). Notre code est fortement modélisé [Nibling en profondeur de modèles] (et est très grand - des centaines de ks de lignes) - je dois donc accepter que les erreurs ne soient pas facilement reconstructibles.


@ JP19 "Des centaines de k de K's de lignes" - c'est le document WTF. Peut-être que GDB a des problèmes avec de gros fichiers? Le plus grand fichier que j'ai essayé était de 10k, et c'était bien.


Désolé, je voulais dire un nombre total de lignes. Le point que j'essayais de transmettre est que la reproduction du bug pourrait être difficile :(. D'où tous les conseils pour clouer le problème sont les bienvenus. La plupart des fichiers sont moins de 10 000 lignes à coup sûr.


Je vais essayer 6.8 de voir si cela aide.



0
votes

J'ai vu quelque chose de similaire (à l'aide de gdb 7.0) où un point d'arrêt défini dans une fonction de modèle n'est jamais touché.

Notre projet est construit à l'aide d'une ancienne version de g ++ (beaucoup plus ancienne que la version expédiée dans ma distribution). J'ai constaté que, en construisant une version de GDB utilisant le même compilateur que nous développons avec le problème du problème.


1 commentaires

C'est intéressant. Je pense la version 7.1 que j'ai essayée a été construite avec le même g ++ que notre code, mais pas sûr. Je vais vérifier cela.



0
votes

GDB définit un point d'arrêt différent pour chaque modèle instancié, c'est-à-dire pour chaque type différent supposé par T (et peut-être z) dans votre programme. Cependant, les adresses qu'il tente de définir des points d'arrêt à 0x121 semblent être trop faibles et correspond probablement à certains emplacements système. C'est probablement pourquoi GDB ne peut pas définir les points d'arrêt.

Vous devriez essayer GDB 7.2, peut-être que cela aidera.

En outre, E2DBG est un type de débogueur différent pour Linux, mais il n'est pas aussi mature que GDB. http://www.eresi-project.org/wiki/thembeddefdebugger


0 commentaires