Si estoy leyendo correctamente entre líneas aquí, el problema es que su excepción está efectivamente 'desapareciendo' a pesar de que el comportamiento del depurador predeterminado debería fallar en las excepciones no controladas.
Si tiene métodos asincrónicos, es posible que se encuentre con este problema porque las excepciones que no se detectan en un subproceso de grupo de subprocesos como parte de una continuación de Tarea no se consideran excepciones no controladas. Por el contrario, se ingieren y almacenan con la tarea.
Por ejemplo, eche un vistazo a este código:
class Program
{
static void Main(string[] args)
{
Test();
Console.ReadLine();
}
private async static Task Test()
{
await Task.Delay(100);
throw new Exception("Exception!");
}
}
Si ejecuta este programa con la configuración predeterminada del depurador (se detiene solo en excepciones no controladas), el depurador no se interrumpirá. Esto se debe a que el subproceso del grupo de subprocesos asignado a la continuación se traga la excepción (pasándola a la instancia de Task) y se libera de nuevo al grupo.
Tenga en cuenta que, en este caso, el problema real es que nunca se comprueba lo Task
devuelto por Test()
. Si tiene tipos similares de lógica de 'disparar y olvidar' en su código, entonces no verá las excepciones en el momento en que se lanzan (incluso si están 'no controladas' dentro del método); la excepción solo aparece cuando observa la Tarea esperándola, verificando su Resultado o mirando explícitamente su Excepción.
Esto es solo una suposición, pero creo que es probable que estés observando algo como esto.
Tool
oWindow
tendrá todas las ubicaciones deseadas. En su caso, está buscando Configuración de excepción .