2009-10-28 4 views
2

J'essaie de déboguer une méthode qui, entre autres choses, ajoute des éléments à une liste qui est locale à la méthode.Définir le point d'arrêt Visual Studio (conditionnel) sur la valeur de la variable locale

Cependant, de temps à autre, la taille de la liste est mise à zéro "mi-flux". Je voudrais placer le débogueur à casser quand la taille de liste devient zéro, mais je ne sais pas comment, et apprécierait n'importe quels indicateurs sur la façon de faire ceci.

Merci.

+0

Vous aurez besoin de comprendre le membre (facilement perdu dans les traits de soulignement et les noms cryptiques ...) et le mettre à l'état. – dirkgently

+0

Désolé à ce sujet. Je suis la programmation C++ dans Visual Studio .NET 2003 – Olumide

+0

vous pouvez (presque) toujours rendre la variable globale et définir un point d'arrêt de données là – Rom

Répondre

3

en C#

if(theList.Count == 0){ 
    //do something meaningless here .e.g. 
    int i = 1; // << set your breakpoint here 
} 

dans VB.NET

If theList.Count = 0 Then 
    'do something meaningless here .e.g. 
    Dim i = 1; ' << set your breakpoint here 
End If 

Pour être complet, voici la version C++:

if(theList->Count == 0){ 
    //do something meaningless here .e.g. 
    int i = 1; // << set your breakpoint here 
} 
+0

il y a une balise "stl" dans la question: STL est une chose en C++ – Rom

+0

@Rom: Vous avez raison, je l'ai manqué, bien que le point d'arrêt conditionnel de Faruz semble être une meilleure option. –

+0

J'ai vérifié la taille de la liste à tous les endroits où j'accède à la liste. Le problème est que la liste est effacée au hasard. Je commence à soupçonner la corruption de la pile. [exemple] tailles de liste: 0, 1, 2, 3, 4, 5, 6, 7, (0), 1, 2, 3, (0) ... – Olumide

0

Je peux donner une réponse partielle pour Visual Studio 2005. Si vous ouvrez la fenêtre « Points d'arrêt » (Alt + F9) vous obtenez une liste de points d'arrêt. Cliquez-droit sur le point d'arrêt que vous voulez, et choisissez "Condition". Puis mettez dans la condition que vous voulez.

+0

J'ai aussi essayé, le breakpoint a été marqué: "Le point d'arrêt ne sera pas actuellement Impossible de trouver des variables en condition ... "Je soupçonne que VS.NET a des problèmes avec la définition des points d'arrêt sur les variables locales. – Olumide

0

Vous avez déjà les deux grandes options proposées: 1. 2. points d'arrêt conditionnels code pour vérifier la valeur incorrecte, et avec un point d'arrêt si cela arrive

La première option est la plus simple et mieux, mais sur les grandes boucles c'est malheureusement très lent! Si vous bouclez des centaines de milliers d'itérations, la seule option réelle est # 2. Dans l'option n ° 1, le processeur pénètre dans le débogueur à chaque itération, puis il évalue la condition et si la condition de rupture est fausse, elle continue simplement l'exécution du programme. Ceci est lent quand il se produit des milliers de fois, il est en fait lent si vous bouclez seulement 1000 fois (selon le matériel bien sûr)

Comme je soupçonne que vous voulez vraiment une condition de point d'arrêt "global" qui devrait casser le programme si un certaines conditions sont remplies (taille de tableau == 0), malheureusement cela n'existe pas à ma connaissance. J'ai fait une fonction de débogage qui vérifie la condition, et si elle est vraie, elle fait quelque chose sans signification que j'ai un breakpoint (c'est-à-dire l'option 2), puis j'appelle fréquemment cette fonction où je suspecte l'original. Lorsque le système se casse, vous pouvez utiliser la pile d'appels pour identifier l'emplacement défectueux.

Questions connexes