Якщо я правильно читаю між рядками тут, проблема полягає в тому, що ваше виняток фактично "зникає", навіть незважаючи на те, що поведінка налагоджувача за замовчуванням повинна порушуватись на необроблені винятки.
Якщо у вас є асинхронні методи, можливо, ви стикаєтеся з цією проблемою, оскільки винятки, не зафіксовані в потоці пулу потоків як частина продовження завдання, не вважаються необробленими винятками. Швидше їх ковтають і зберігають із Задачею.
Наприклад, погляньте на цей код:
class Program
{
static void Main(string[] args)
{
Test();
Console.ReadLine();
}
private async static Task Test()
{
await Task.Delay(100);
throw new Exception("Exception!");
}
}
Якщо ви запускаєте цю програму з налаштуваннями налагодження за замовчуванням (зупиняйтеся лише на необроблених винятках), налагоджувач не порушиться. Це відбувається тому, що потік пулу потоків, призначений для продовження, проковтує виняток (передаючи його екземпляру Завдання) і відпускає назад у пул.
Зауважте, що в цьому випадку справжньою проблемою є те, що Task
повернута особа Test()
ніколи не перевіряється. Якщо у вашому коді є подібні типи логіки «застріл і забудь», ви не побачите винятків під час їх викидання (навіть якщо вони «оброблені» всередині методу); виняток з’являється лише тоді, коли ви спостерігаєте Задачу, очікуючи її, перевіряючи її Результат або явно дивлячись на його Виняток.
Це лише здогадка, але я думаю, що, ймовірно, ви спостерігаєте щось подібне.
Tool
або наWindow
вкладці не буде всіх бажаних місць. У вашому випадку ви шукаєте Налаштування винятку .