J'ai utilisé deux versions différentes de GDB, les deux posent des problèmes dans le code suivant:
Code coupé dans GDB 7.1: P> myfile.h code>: 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
3 Réponses :
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é. P>
Vous avez formulé votre question vraiment sympa (vous avez donc probablement fait), mais avez-vous compilé vos sources avec des symboles de débogage? P>
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. P>
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.
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é. P>
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. P>
C'est intéressant. Je pense i> 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.
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. p>
Vous devriez essayer GDB 7.2, peut-être que cela aidera. p>
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 p>
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.