Тестирование и отладка
Допустим, вы работаете над программой на С++, которую по мере разработки тестирует другой человек или группа людей.
Допустим, ваша программа с завидной регулярностью валится.
Допустим, это сопровождается не сообщением
«Уважаемый тестер! Программа свалилась по причине того, что разработчик в файле MyFile.cpp, строке 12 написал new char[ strlen( str + 1 ) ] вместо new char[ strlen( str ) + 1 ]. Подскажите разработчику, чтобы он больше так не делал»а
(0x80000003) occurred in the application at location 0x0041d12b.
Что делать.
Значит, Во-вторых:
В общем, библиотеку нужно подключить, а затем сделать
void DumpIt( HANDLE hFile, PEXCEPTION_POINTERS excpInfo) MINIDUMP_EXCEPTION_INFORMATION eInfo; MiniDumpWriteDump( //... hDump_File = CreateFile("crash.dmp", GENERIC_WRITE, NULL, CREATE_ALWAYS, __try __except(DumpIt(hDump_File, GetExceptionInformation()), 0) {} CloseHandle(hDump_File);#include <dbghelp.h>
{
MessageBox( NULL, "An exception!", "OMG NO", MB_OK | MB_ICONSTOP );
eInfo.ThreadId = GetCurrentThreadId();
eInfo.ExceptionPointers = excpInfo;
eInfo.ClientPointers = FALSE;
GetCurrentProcess(),
GetCurrentProcessId(),
hFile,
MiniDumpNormal,
excpInfo ? &eInfo : NULL,
NULL,
NULL);
}
FILE_ATTRIBUTE_NORMAL, NULL);
{
// Сюда вписать опасный код. В моем случае - всё приложение.
}
Удачи в отладке.
Update: А, ну гениально. Самое главное забыл сказать. Вышеприведенный код в случае «падения» запишет в файл hDump_File некоторую информацию, с помощью которой можно более или менее точно восстановить обстоятельства крушения. Этот файл можно открыть студией (Open Project/Solution), нажать F5 и оказаться в условиях, близких к тем, которые привели к катастрофе. Желательно, чтобы файл имел расширение .dmp, это облегчит студии понимание, что ей пытаются всучить.
Ссылка по теме: Статья на английском с примерами. Кроме самой функции MiniDumpWriteDump в статье (и примерах) много лишней ерунды, зато примеры компилируются и работают. Sapienti sat, всё такое.