Предсказуемый код завершения аварийного процесса в Windows
Для процесса, обычно завершающего работу в Windows, код завершения процесса обычно является либо возвращаемым значением изmain
или код выхода переданstd::exit
. %ERRORLEVEL%
затем можно использовать для запроса кода выхода, и это можно использовать для определения, правильно ли выполнялась программа, или были какие-то исключительные входы / сбои, которые указывают на конкретную проблему (специфическую для приложения).
Тем не менее, я заинтересован в коде выхода, если процесс падает. Возьмите очень простой пример программы:
int main()
{
int * a = nullptr;
*a = 0xBAD;
return 0;
}
Когда я компилирую это и запускаю в Windows, в командной строке я получаю:
MyCrashProgram.exe -> crashes
echo %ERRORLEVEL% -> -1073741819
Код выхода соответствует этому номеру. Что приводит меня к нескольким вопросам:
Был код выхода-1073741819
как-то предсказуемо, основано на сбое недопустимой записи?Если да, есть ли способ определить тип сбоя, основываясь на коде выхода?Меняется ли это в зависимости от используемого компилятора (я использовал MSVC 2012)?Меняется ли это в зависимости от используемой версии Windows (я использовал Win10 TP)?Меняется ли это с архитектурой (например, x64 - я использовал Win32)?Обратите внимание, меня не интересует, как изменить программу, чтобы перехватить исключение. Я заинтересован в классификации сбоев, которые могут произойти в существующих программах, которые я не могу изменить.