2010-07-15 3 views
2

J'ai un vecteur stl d'objets de classe personnalisés définis dans un espace de noms global (ouais, mal, je sais). Maintenant, je voudrais définir un point de contrôle dans gdb pour surveiller les changements possibles dans une variable membre (publique) pour un certain élément de ce vecteur. Quelque chose comme:Regarder le contenu du vecteur stl via gdb

watch custom_namespace::vec[123].aVariable 

Si je fais ça, alors gdb (version 7.1 sur Ubuntu Lucid) segfaults. Existe-t-il d'autres moyens? Est-ce possible?

+0

Quel est le type de cette variable? –

+0

Indépendamment de votre syntaxe, cela ne devrait pas conduire à un segfault. Avez-vous signalé ce comportement à la liste de diffusion gdb? Ils pourraient vous aider et réparer le bug. – ereOn

+0

La variable elle-même est de type double. Le vecteur contient des objets d'une classe qui regroupe principalement des valeurs doubles, int et bool. Rien d'extraordinaire là-bas. Non, je n'ai pas encore vérifié avec la gdb-list. En fait, j'utilise ddd, je devrais vérifier avec gdb autonome d'abord .. – janitor048

Répondre

2

Voir si tel est votre cas (de gdb manual):

Sometimes, gdb cannot set a hardware watchpoint because the data type of the watched expression is wider than what a hardware watchpoint on the target machine can handle. For example, some systems can only watch regions that are up to 4 bytes wide; on such systems you cannot set hardware watchpoints for an expression that yields a double-precision floating-point number (which is typically 8 bytes wide). As a work-around, it might be possible to break the large region into a series of smaller ones and watch them with separate watchpoints.


Essayez casting l'adresse à (int*). Est-ce qu'il se sépare encore?

Aussi STL vector déplacera son contenu s'il a besoin d'étendre le tampon interne, de sorte que votre objet peut simplement être "volé" sous le point de contrôle.

Questions connexes