0

Si j'ai un scénario de boucle imbriqué et que je suis en mode débogage. Ex:Scénario de boucle imbriquée, obtention de valeurs avant l'exception en mode débogage - Visual Studio

for (int i = 0; i < listTest.Count; i++) 
{ 
    for (int j = 0; j < anotherList.Count; j++) 
    { 
     //Some logic that throws an exception 
    } 
} 

est pour moi il un moyen de connaître les valeurs de i, j, listTest[i] and anotherLIst[j] juste avant l'exception a eu lieu? Si les valeurs de comptage sont élevées, il est peu pratique de parcourir les boucles et d'observer ces valeurs avant que l'exception ne se produise

Répondre

2

D'abord, vous pouvez modifier les paramètres VS2008 pour briser en cas d'exception lors de la levée:

Debug >> Exception >> Common Language Runtime Exceptions Dialog 

Cela entraînera le débogueur pour arrêter sur la ligne de code qui génère l'exception incriminée, et i et j devraient être dans la portée à ce moment-là.

Vous pouvez également promouvoir les variables de boucle i et j en dehors des boucles; comme suit:

int i, j; 
for (i = 0; i < listTest.Count; i++) 
{ 
    for (j = 0; j < anotherList.Count; j++) 
    { 
     //Some logic that throws an exception 
    } 
} 
+0

L'un des joyaux cachés de VS. –

+0

Vous me battez à lui – Justin

1

Entourez tout le code à l'intérieur de la deuxième boucle avec un bloc try/catch. Attrapez l'exception et retirez-la. Placez votre point d'arrêt sur la ligne dans la capture. Lorsque l'exception se produit, i et j doivent être la valeur au moment de l'exception.

1

Vous pouvez configurer Visual Studio pour interrompre toutes les exceptions. Dans Visual Studio goto Debug-> Exceptions dans le menu. La vérification à interrompre lorsqu'une exception est levée pour les exceptions d'exécution Common Language. Cela le fera casser ici sans attraper.

Remarque: Vous ne voulez probablement pas cela sur tout le temps, et si vous utilisez une logique qui pourrait éventuellement lancer une exception, vous devriez utiliser un try/catch.

Questions connexes