Я использую 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-битным кодом в обоих случаях. Я буду применять это к своему реальному коду, как только он заработает, но на данный момент я не могу понять, что происходит. Мини-дампрайтер, который я использую, взят с сайта, как указано выше.
Я считаю, что вы пропустили этот шаг:
Чтобы вызвать API, вам нужно поймать сбой, установив обработчик необработанного исключения с помощью
SetUnhandledExceptionFilter
API. Это позволяет вызывать функцию фильтра практически в любое время, когда в приложении возникает необработанное исключение. В некоторых необработанных исключениях, таких как ошибка двойного стека, операционная система немедленно завершить приложение без вызова фильтра или JIT-отладчика.
Во всяком случае, я лично предпочитаю использовать WinDbg в таких случаях. Просто подключите к нему удаленный процесс и получите этот дамп.
Других решений пока нет …