Dato questo gioiello di codice:Debugger entrare in se() blocco in cui la condizione è falsa
class Program
{
private static bool IsAdmin = true;
static void Main(string[] args)
{
if (!IsAdmin)
{
throw new Exception();
}
try
{
var x = 2342342;
var y = 123132;
}
catch (Exception)
{
throw;
}
}
}
Data la this.IsAdmin
cede vero - mi aspetterei il debugger di non entrare in quel if. In realtà lo fa - e supera il tiro ma in realtà non lancia!
Ora questo accade solo quando si ha un'eccezione all'interno di un'istruzione if seguita da un blocco try/catch, in Visual Studio 2013, con targeting .NET Framework 4, 64 bit, "Prefer 32 bit" deselezionato.
Ho confermato questa stranezza con i colleghi su macchine diverse. Passo anche se il codice seguente e il debugger vi sembrerà di entrare nel caso ramo, ma non viene generata un'eccezione:
Sono in modalità debug, ho provato la compilazione e la pulizia il progetto più volte.
Qualcuno può spiegare perché questo sta accadendo?
Nice find, il debuger fa tutto pazzo per IL IL, probabilmente il pre-ottimizzazione della variabile di ottimizzazione o qualcosa del genere – BhavO