Помогите разобраться!
Включаю JIT: "drwtsn32 -i". Делаю вот так:
BOOL MyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
int* p = 0;
*p = 1;
}
Все ОК, пишется дамп и событие в системный журнал, никаких диалоговых окон не выскакивает, программа умирает молча. Но если делаю так:
BOOL MyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
throw;
}
То выскакивает это окошко: "C++ Run-Time Library Error" с одной единственной кнопкой ОК, которую надо нажать, и только после этого программа умрет, да и дамп с событием не пишутся.
Цель — чтобы программа умирала молча, без участия пользователя (тогда она сама перезапустится).
В своих программах я использовал комбинацию SetErrorMode + SetUnhandledExceptionFilter, но это чужая программа. Она хаотически на сервере валится, и я ничего с этим почти не могу сделать, написал только утилитку, автоматически на кнопку ОК давящую, но это же не решение! Надо в момент краха сохранить дамп и отослать разработчику, тогда с меня взятки гладки будут. В принципе ошибка которая имеет место быть — ошибка при обращении к памяти, я даже знаю в чем причина, но для интереса, так и не смог разобраться, как быть с необработанными исключениями типа throw — как заставить JIT их обрабатывать?
PS. Я до этого всегда думал, что throw и int* p = 0; *p = 1; — приводят к одного вида исключению, но в случае с JIT у меня получается видимая разница.