обработка исключений — дамп памяти не записывается в режиме C ++ Release

Я использую http://www.codeproject.com/Articles/1934/Post-Mortem-Debugging-Your-Application-with-Minidu чтобы получить файл дампа из моего приложения, которое всегда падает в другой системе.

Итак, у меня есть этот заголовочный файл и CPP и в режиме отладки, но без отладчика, он спрашивает меня, хочу ли я создать файл dmp или нет, а затем вылетает, но в режиме выпуска он просто вылетает.

В основном код, который я использовал,

void IndexFault(int n)
{
unsigned char* smallArray = new unsigned char[4];
printf((const char*)smallArray[n]);
}

MiniDumper* mDump = new MiniDumper("Dumpfile");

int main()
{
IndexFault(4);
return 0;
}

Опять же, если выполнить исполняемый файл, созданный в режиме отладки, я получаю файл очень хорошо, с выпуском я ничего не получаю. Это с 64-битным кодом в обоих случаях. Я буду применять это к своему реальному коду, как только он заработает, но на данный момент я не могу понять, что происходит. Мини-дампрайтер, который я использую, взят с сайта, как указано выше.

3

Решение

Я считаю, что вы пропустили этот шаг:

Чтобы вызвать API, вам нужно поймать сбой, установив обработчик необработанного исключения с помощью SetUnhandledExceptionFilter API. Это позволяет вызывать функцию фильтра практически в любое время, когда в приложении возникает необработанное исключение. В некоторых необработанных исключениях, таких как ошибка двойного стека, операционная система немедленно завершить приложение без вызова фильтра или JIT-отладчика.

Во всяком случае, я лично предпочитаю использовать WinDbg в таких случаях. Просто подключите к нему удаленный процесс и получите этот дамп.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]