В Windows вы можете настроить Dr.Watson на клиентском компьютере, чтобы в случае сбоя вашего приложения оно создавало так называемый «файл мини-дамп», который затем может быть открыт отладчиком с соответствующий PDB.
Вы также можете добавить фильтр необработанных исключений в свое приложение и самостоятельно создать минидамп в случае неисправимой ошибки.
Edit:
В случае, если вы хотите создать файл дампа при (необработанном) исключении - не делайте этого внутри блока C ++ catch (...)
, потому что он вызывается после , когда произошла откат стек вызовов недоступен.
Чтобы захватить и сбросить стек вызовов, вы должны сбросить его до разматывания стека. Как это:
int HandleMyException(EXCEPTION_POINTERS* pExc)
{
// dump it
MiniDumpWrite(...);
// Unless you decide to terminate your process, return EXCEPTION_EXECUTE_HANDLER, so that the execution
// continues normally after the __except block.
return EXCEPTION_EXECUTE_HANDLER;
}
__try
{
// Do something...
}
__except (/* stack still not unwound */ HandleMyException(GetExceptionInformation()))
{
// unwind already took place here, nothing to dump
}