Se sto leggendo correttamente tra le righe qui, il problema è che la tua eccezione sta effettivamente "scomparendo" anche se il comportamento del debugger predefinito dovrebbe interrompersi in caso di eccezioni non gestite.
Se si dispone di metodi asincroni, è possibile che si verifichi questo problema perché le eccezioni non rilevate in un thread del pool di thread come parte di una continuazione dell'attività non sono considerate eccezioni non gestite. Piuttosto, vengono inghiottiti e archiviati con l'attività.
Ad esempio, dai un'occhiata a questo codice:
class Program
{
static void Main(string[] args)
{
Test();
Console.ReadLine();
}
private async static Task Test()
{
await Task.Delay(100);
throw new Exception("Exception!");
}
}
Se esegui questo programma con le impostazioni predefinite del debugger (interrompi solo le eccezioni non gestite), il debugger non si interromperà. Ciò è dovuto al fatto che il thread del pool di thread allocato alla continuazione ingoia l'eccezione (passandola all'istanza di Task) e si rilascia nuovamente nel pool.
Nota che, in questo caso, il vero problema è che il Task
restituito da Test()
non viene mai controllato. Se hai tipi simili di logica "spara e dimentica" nel tuo codice, non vedrai le eccezioni nel momento in cui vengono lanciate (anche se sono "non gestite" all'interno del metodo); l'eccezione compare solo quando si osserva l'attività in attesa, verificando il suo risultato o osservando esplicitamente la sua eccezione.
Questa è solo un'ipotesi, ma penso che probabilmente stai osservando qualcosa di simile.
Tool
oWindow
avrà tutte le posizioni desiderate. Nel tuo caso stai cercando Impostazioni di eccezione .