Приложение
My C# (. Net Framework 4.6.2) вылетало без логов. После нескольких дней проб и ошибок я обнаружил, что исходный код представляет собой простую ошибку деления на ноль. Однако этот фрагмент кода находится в перехвате попытки, но вместо того, чтобы быть брошенным и пойманным, отладчик (Visual Studio 2019 v16.2.5) показывает неперехваченную ошибку «FatalExecutionEngineError».
Managed Debugging Assistant 'FatalExecutionEngineError' : 'The runtime has encountered a fatal error. The address of the error was at 0xf7bee845, on thread 0x760c. The error code is 0xc0000005. This error may be a bug in the CLR or in the unsafe or non-verifiable portions of user code. Common sources of this bug include user marshaling errors for COM-interop or PInvoke, which may corrupt the stack.
После продолжения это исключение отображается, а затем процесс приложения умирает.
System.ExecutionEngineException: 'Exception of type 'System.ExecutionEngineException' was thrown.
Кажется, это происходит, даже если нет отладчик прилагается.
Очень странно. Есть ли способ поймать этот тип исключения? Что может быть причиной того, что DivideByZeroException не перехватывается?
Вот часть кода:
{
...
///line that causes the exception when 'amount' is zero
int toScaleToWidth = (int)(bmp.Width / amount), toScaleToHeight = (int)(bmp.Height / amount);
...
}
catch(Exception ee)
{
//logging
}
Обновить. Некоторые полезные комментарии @gravity и @ KlausGütter заставили меня задуматься, возникнет ли проблема, если бы переменная bmp.Width была заменена фиксированным числом. Оно делает.