Si je lis correctement entre les lignes ici, le problème est que votre exception «disparaît» effectivement, même si le comportement du débogueur par défaut doit être interrompu sur les exceptions non gérées.
Si vous disposez de méthodes asynchrones, vous rencontrez peut-être ce problème car les exceptions non interceptées sur un thread de pool de threads dans le cadre d'une continuation de tâche ne sont pas considérées comme des exceptions non gérées. Au contraire, ils sont avalés et stockés avec la tâche.
Par exemple, jetez un œil à ce code:
class Program
{
static void Main(string[] args)
{
Test();
Console.ReadLine();
}
private async static Task Test()
{
await Task.Delay(100);
throw new Exception("Exception!");
}
}
Si vous exécutez ce programme avec les paramètres du débogueur par défaut (arrêt uniquement sur les exceptions non gérées), le débogueur ne s'arrêtera pas. Cela est dû au fait que le thread du pool de threads alloué à la suite avale l'exception (en la transmettant à l'instance Task) et se libère dans le pool.
Notez que, dans ce cas, le vrai problème est que le Task
renvoyé par Test()
n'est jamais vérifié. Si vous avez des types similaires de logique «feu et oubliez» dans votre code, vous ne verrez pas les exceptions au moment où elles sont lancées (même si elles ne sont pas gérées dans la méthode); l'exception n'apparaît que lorsque vous observez la tâche en l'attendant, en vérifiant son résultat ou en regardant explicitement son exception.
Ce n'est qu'une supposition, mais je pense que vous observez probablement quelque chose comme ça.
Tool
ouWindow
aura tous les emplacements souhaités. Dans votre cas, vous recherchez des paramètres d'exception .