はい、Windowsでも可能です。私はLinuxを知りません、それもできると思います。
例外ハンドラ関数を登録して、throw
前に応答することができcatch
ます。コード例は次のとおりです。
#include <iostream>
#include "windows.h"
#define CALL_FIRST 1
LONG WINAPI
VectoredHandler(
struct _EXCEPTION_POINTERS *ExceptionInfo
)
{
UNREFERENCED_PARAMETER(ExceptionInfo);
std::cout <<"VectoredHandler"<<std::endl;
return EXCEPTION_CONTINUE_SEARCH;
}
int main()
{
PVOID handler;
handler = AddVectoredExceptionHandler(CALL_FIRST,VectoredHandler);
try {
throw 1;
}catch(...)
{
std::cout <<"catch (...)"<< std::endl;
}
RemoveVectoredExceptionHandler(handler);
std::cout << "end of main"<<std::endl;
return 0;
}
コードの出力は次のとおりです。
VectoredHandler
catch (...)
end of main
したがって、coreintを関数にダンプできますVectoredHandler
。はVectoredHandler
、デバッガーが最初のチャンスの通知を受け取った後、システムがスタックの巻き戻しを開始する前に呼び出されます。また、問題の問題をデバッグすることだけが目的の場合は、デバッガー機能を使用して最初のチャンスの例外を処理できます。アプリケーションをダンプする必要はありません。
参考までに、ファーストチャンス例外とは何かを知る必要があるかもしれません。Windowsで例外をディスパッチする方法を理解するためにWindowsで。