Imaginez que vous avez une classe appelée A avec la déclaration suivante.
class A
{
public:
A();
private:
int m_value;
};
Vous voulez que le programme s'arrête lorsque quelqu'un modifie la valeur de "m_valeur".
Allez dans la définition de la classe et mettez un point d'arrêt dans le constructeur de A.
A::A()
{
... // set breakpoint here
}
Une fois que nous avons arrêté le programme :
Debug -> New Breakpoint -> New Data Breakpoint ...
Adresse : &(this->m_value)
Nombre d'octets : 4 (Parce que int a 4 octets)
Maintenant, nous pouvons reprendre le programme. Le débogueur s'arrêtera lorsque la valeur sera modifiée.
Vous pouvez faire de même avec les classes héritées ou les classes composées.
class B
{
private:
A m_a;
};
Adresse : &(this->m_a.m_value)
Si vous ne connaissez pas le nombre d'octets de la variable que vous voulez inspecter, vous pouvez utiliser l'opérateur sizeof.
Par exemple :
// to know the size of the word processor,
// if you want to inspect a pointer.
int wordTam = sizeof (void* );
Si vous regardez la "pile d'appels", vous pouvez voir la fonction qui a changé la valeur de la variable.
0 votes
Mais le point d'arrêt n'affecte rien tant que la condition n'est pas remplie, donc vous pouvez placer votre point d'arrêt n'importe où (comme le Setter) et le prendre à partir de là. Ou est-ce que quelque chose m'échappe ?
6 votes
Eh bien, c'est comme la façon vb6 de déboguer. vous ne vous souciez pas de l'emplacement du point d'arrêt. il suffit d'ajouter une expression conditionnelle à la fenêtre de surveillance et vb6 garantira qu'elle s'arrêtera dès que la condition sera remplie
0 votes
Désolé, je n'ai jamais vu de moyen, pour autant que je sache, le setter est la solution.
1 votes
J'espérais trouver de meilleures nouvelles ; le vs2010 n'indique aucun changement msdn.microsoft.com/fr/us/library/350dyxd0.aspx seul le c++ natif a cela @Scottgu vous pouvez faire mieux !