У меня есть простой пример чистой комнаты с этой возможной ошибкой.
static void Main(string[] args)
{
bool MyFalse = false;
if (MyFalse)
{
throw new Exception();
}
try
{
int i = 0;
}
catch (Exception e)
{
Console.Write(e);
}
Console.Read();
}
Если скомпилировано в x64 или AnyCPU (если в VS2012 установлено 32bit, то если вы поставили точку останова в блоке if, она всегда будет удалена.
Мы пробовали его в VS2012, VS2010 и VS2008, и все они запускали блок if при компиляции в 64-битном режиме, но в 32-битном режиме он не запускает блок if.
Мы рассмотрели IL для 32-битных и 64-битных версий, и они выглядят одинаково.
Мы нашли это в производственном коде, потому что блок if был запущен, и исключение было выбрано независимо от значения переменной boolean, хотя в простом примере мы не можем генерировать исключение, это происходит в производственном коде.
Дел >
Так как это происходит в производственном коде, это не просто проблема отладчика.
Очень странное поведение, но, похоже, не работает с любым кодом в блоке if. Разработчик прыгнул с пистолета, предполагая, что это был исключение, которое он видел.
(Вся отладка находится в режиме отладки - производство находится в выпуске)
Если бросок закомментирован - блок if не достигнут.