2010-02-04 3 views
3

J'essaye de mettre en place un watchpoint pour surveiller une variable dans un paquet composé de beaucoup de fichiers C++.Comment configurer les points de contrôle gdb dans un programme composé de nombreux fichiers en C++?

Il y a beaucoup de fichiers

abc.cpp qwe.cpp .. xyz.cpp et ainsi de suite

Je veux surveiller une variable 'température' dans une fonction azerty() dans la fichier abc.cpp Comment définir le point de contrôle?

J'ai essayé

montre abc.cpp :: temp montre abc.cpp: temp montre température

mais je vois les erreurs Aucun symbole de abc.cpp :: temp ',' abc. cpp: temp ',' temp 'pas dans le contexte actuel De plus, un point de surveillance d'information me dit qu'aucun point de surveillance n'est défini. Notez que je peux définir avec succès les points d'arrêt pour la même variable

Répondre

3

Je définis toujours un point d'arrêt dans la fonction, puis définissez le point d'observation lorsque je le touche, de sorte que je suis dans le contexte, puis supprimez le point d'arrêt comme approprié.

+0

En effet - pour les variables locales vous avez vraiment Pour ce faire, étant donné qu'un point de surveillance est juste une plage d'adresses, une fois que vous quittez l'étendue dans laquelle la variable est définie, le point de surveillance peut être déclenché par tout autre élément utilisant la même plage d'adresses sur la pile. –

0

Voulez-vous créer des points d'arrêt conditionnels? Si alors vous pouvez utiliser les commandes ci-dessous.

(gdb) briser abc :: azerty()
(gdb) condition 1 temp = 1 // Si vous voulez briser lorsque la valeur de temp = 1.

+2

La question dit spécifiquement "watchpoint", pas "breakpoint conditionnel". –

+0

Eh bien j'ai essayé de mettre en place un point d'arrêt dans la fonction, où je veux surveiller la variable en cours de modification. Une fois son hit, j'ai mis en place le point de contrôle simplement comme watch var_name Mais pour une raison quelconque, je ne frappe pas le watchpoint. Je suis sûr que le var_name est écrit par le programme. [Sa cession à VAR_NAME] J'ai aussi essayé commandes breakpoint_no > montre var_name > c > fin Je le package de débogage installé, donc je pense que les symboles ne devraient pas être un problème. La version GDB que j'utilise est gdb 6.8-debian Je ne suis pas sûr quel est le chaînon manquant –

Questions connexes