Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват стандартных эксепшенов, SetUnhandledExceptionFilter 
:(
    Опции темы
Andrey44
Дата 7.3.2008, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 8
Всего: 26



Доброе утро всем.

Сталкнулся с такой проблемой:

В начале программы делаю:
Код

SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ExceptionFilter);


Функция ExceptionFilter обрабатывает эксепшены. 
Но, при возникновении ошибки выбрасывается стандартное окно студии.
Запускаю прогу под релизом. Подскажите, что не так! Бьюсь уже второй день smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Lazin
Дата 7.3.2008, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



SetUnhandledExceptionFilter вызывается в случае возникновения необработанного исключения, то-есть перед тем как программа должна загнуться, так-что все правильно))
кстати если ExceptionFilter вернет значение EXCEPTION_CONTINUE_EXECUTION, выполнение программы должно продолжиться, но под отладчиком такие вещи проверить не получится...
PM MAIL Skype GTalk   Вверх
Andrey44
Дата 7.3.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 8
Всего: 26



Lazin, ты хочешь сказать, что я не смогу подменить стандартное
окно эксепшенов?

Тогда почему , когда я делаю
Код

__try{
.......................
}__except(ExceptionFilter(GetExceptionInformation())
{
}


у меня все работает нормально и смотря от того какое исключение выбрасывается
я получаю о нем инфу. А если например мне нужно снять дамп?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Lazin
Дата 7.3.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



Так тебе нужно что-бы не появлялось окно с предложением послать отчет в M$, я думал речь идет об окне отладчика студии...
Дамп я пишу вот так:
Код

LONG WINAPI UExceptFilter(_EXCEPTION_POINTERS* ExceptionInfo)
{
    char block[_MAX_PATH];

    //здесь заполняется block именем файла дампа....

    HANDLE hProc = GetCurrentProcess();
    HANDLE hFile = CreateFile(
                        block, 
                        GENERIC_READ|GENERIC_WRITE, 
                        FILE_SHARE_READ, 
                        NULL,
                        CREATE_ALWAYS, 
                        FILE_ATTRIBUTE_NORMAL, 
                        NULL
                        );
    MINIDUMP_EXCEPTION_INFORMATION eInfo;
    eInfo.ExceptionPointers = ExceptionInfo;
    eInfo.ThreadId = ::GetCurrentThreadId();
    eInfo.ClientPointers = NULL;
    BOOL ret = MiniDumpWriteDump(    
                        hProc, 
                        GetProcessId(hProc), 
                        hFile,
                        MiniDumpWithFullMemory,
                        ExceptionInfo ? &eInfo : NULL,
                        NULL,NULL
                );
    CloseHandle(hFile);
    return EXCEPTION_CONTINUE_SEARCH;
}


только учитывай, что можно сделать дамп меньшего размера(только стек и регистры), а для того что-бы его можно было использовать нужна та-же версия pdb файла и исходников, что и exe))
PM MAIL Skype GTalk   Вверх
Andrey44
Дата 7.3.2008, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 8
Всего: 26



Lazin, спасибо большое за пример.
А перехват исключений я перехватываю все, просто если запускать под студией
она ставит свой фильтр и перехватывает исключения. Надо просто было запускать свой
екзешник и ловить сообщения. smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.