Question

J'essaie de déboguer mon code qui est en cours d'exécution à partir d'un projet de test unitaire, mais lorsque j'essaie d'entrer dans une méthode, il passe directement à la ligne suivante et le point d'arrêt à l'intérieur de cette méthode n'est pas touché. La méthode est sur une classe qui est dans un projet différent, mais tout le code est construit en mode débogage et j'ai essayé de nettoyer et de reconstruire la solution sans joie.

Cependant, cela n’est arrivé que depuis que j’ai ajouté un bloc itérateur à la méthode. Lorsque je le supprime et que je le reconstruis, je peux bien intervenir. Bizarre?

J'utilise Visual Studio 2010 Bêta 1, s'agit-il d'un bogue?

Était-ce utile?

La solution

Les blocs Iterator utilisent l’exécution différée - c’est-à-dire que tant que vous ne commencez pas à parcourir les données, rien n’est exécuté.

Alors: les données ont-elles été itérées? Est-ce que quelque chose boucle sur les valeurs? Si vous devez ajouter une logique de validation qui s'exécute le plus tôt possible, vous avez actuellement besoin de deux méthodes:

public static IEnumerable<int> GetNumbers(int from, int to) {
    // this validation runs ASAP (not deferred)
    if (to < from) throw new ArgumentOutOfRangeException("to");
    return GetNumbersCore(from, to);
}
private static IEnumerable<int> GetNumbersCore(int from, int to) {
    // this is all deferred
    while (from <= to) {
        yield return from++;
    }
}

Autres conseils

Marc a raison. La méthode est différée, exécutée et vous ne pouvez pas y entrer tant que l’itérateur n’a pas été exécuté.

Lorsque je dois déboguer un bloc itérateur dans un test unitaire, je procède comme suit. Supposons que la méthode s'appelle GetStuff.

[TestMethod]
public void TestGetStuff() {
  var obj = GetStuffObje();
  var list = obj.GetStuff().ToList();
}

L'appel .ToList () forcera l'itérateur à s'exécuter complètement. J'ai ensuite défini un point d'arrêt dans la méthode GetStuff et lancé une session de débogage

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top