UnhandledExceptionFilter пропускает исключения
От: mPronin  
Дата: 12.02.08 10:55
Оценка:
Прокомментируйте плиз.

long __stdcall filter(_EXCEPTION_POINTERS* ExceptionInfo)
{
    dump(0, MiniDumpWithDataSegs);
    return EXCEPTION_CONTINUE_SEARCH;
}

int _tmain(int argc, _TCHAR* argv[])
{
    SetUnhandledExceptionFilter(filter);
    crash();
}

//1
void crash()
{
    std::vector<char> tmp(10000000000);
}
//2
void crash()
{
    int tmp = 0;
    tmp = 10 / tmp;
}
//3
void crash()
{
    std::vector<char> tmp;
    tmp[10] = 0;
}

В 1-ом и 2-ом случае вызывается мой фильтр, который создает дамп. В третьем случае дамп не создается. Причины? Какая разница между исключением в 1-ом случае и в 3-ем? Как бы сделать так, что бы управление моему фильтру передавалось всегда?
Re: UnhandledExceptionFilter пропускает исключения
От: mPronin  
Дата: 12.02.08 12:58
Оценка:
Вообщем ситуация прояснилась. Не понятным осталось одно — за каким сбрасывается пользовательский обработчик не перехваченных исключений при разруле невалидных параметров.
Re: UnhandledExceptionFilter пропускает исключения
От: mPronin  
Дата: 12.02.08 13:36
Оценка:
Продолжу беседу с самим собой Разве в такой ситуации:
void crash()
{
    std::vector<char> tmp;
    tmp[10] = 0;
}

не должно кидаться исключение (не уверен, но что-то типа out_of_range)? Зачем это там появляется какой-то _invalid_parameter_handler, которого если нет, то все в итоге заканчивается вызовом terminate. Так все и задумано изначально, или это выдумки мелкософта?
Re[2]: UnhandledExceptionFilter пропускает исключения
От: Tonal- Россия www.promsoft.ru
Дата: 12.02.08 15:21
Оценка: 2 (2)
Здравствуйте, mPronin, Вы писали:
P>Продолжу беседу с самим собой Разве в такой ситуации:
P>
P>void crash()
P>{
P>    std::vector<char> tmp;
P>    tmp[10] = 0;
P>}
P>

P>не должно кидаться исключение (не уверен, но что-то типа out_of_range)?
Нет, здесь никакого исключения по стандарту нет, есть только UB. Исключения о выходе за пределы бросаются функцией vector<T>::at(size_type).
Так что в этом случае ты просто пишешь куда попало, со всеми вытекающими.
... << RSDN@Home 1.2.0 alpha rev. 789>>
Re: UnhandledExceptionFilter пропускает исключения
От: shrecher  
Дата: 13.02.08 11:59
Оценка:
Включи gflags
Re[2]: UnhandledExceptionFilter пропускает исключения
От: Sergey Россия  
Дата: 13.02.08 13:09
Оценка:
"mPronin" <68640@users.rsdn.ru> wrote in message news:2834277@news.rsdn.ru...
> Продолжу беседу с самим собой Разве в такой ситуации:
>
> void crash()
> {
> std::vector<char> tmp;
> tmp[10] = 0;
> }
>

> не должно кидаться исключение (не уверен, но что-то типа out_of_range)?

Не должно. Не помню точно — то ли UB, то ли implementation defined. Чтобы кидалось out_of_range, надо писать tmp.at(10) = 0;

> Зачем это там появляется какой-то _invalid_parameter_handler, которого если нет, то все в итоге заканчивается вызовом terminate. Так все и задумано изначально, или это выдумки мелкософта?


В данном случае мокрософт имеет право выдумывать все что им угодно.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.