私はC++ DLLを読み込むPythonアプリケーションを開発しています。そのようなDLLでは、私たちは大変な作業をしており、Googleのブレッドパッドクラッシュレポートシステムを追加したいと考えています。 Windowsでは、そのDLLがロードされると例外ハンドラをインスタンス化します。ただし、クラッシュが発生し、ミニダンプが書き込まれない場合、その例外ハンドラは決して呼び出されません。単純なC++コンソールアプリケーションで同じ設定を使用すると、すべて正常に動作します。どうやら何かが例外ハンドラがDLLにインスタンス化されたときに通知されるのを防ぎます。ブレッドパッド例外ハンドラがWIndows上のDLLで使用されていませんか?
Googleのブレッドパッド例外ハンドラがDLLで呼び出されていることを確認するにはどうすればよいですか?
以下は、私たちが使用する設定です。フレームワークは、DLLを使用する直前に作成されるシングルトンです。
# include <client/windows/handler/exception_handler.h>
bool callback(
const wchar_t* /*dump_path*/, const wchar_t* /*minidump_id*/,
void* /*context*/, EXCEPTION_POINTERS* /*exinfo*/, MDRawAssertionInfo* /*assertion*/,
bool succeeded)
{
std::cout << "dump callback called" << std::endl;
return succeeded;
}
class Framework
{
Framework()
: handler{ std::make_unique<google_breakpad::ExceptionHandler>(
L".", // dump path
nullptr, // no filter
callback, // to call after writing the minidump
nullptr, // callback does not use context
google_breakpad::ExceptionHandler::HANDLER_ALL) }
{
std::cout << "Exception handler registered" << std::endl;
}
~Framework()
{
std::cout << "Exception handler destroyed" << std::endl;
}
private:
std::unique_ptr<google_breakpad::ExceptionHandler> handler;
};
P.S. :Breakpadハンドラは、同じ設定を持つ私たちのLinuxバージョンのアプリでうまく動作します。
ありがとうございました。
私たちはdll attach(DLLMainメソッド内)の最期のlvl ::で書き込もうとしましたが、同じ結果があります。どこでどのようにDLLコンテキストでより正確に作成しますか? – Tayliator
私はすべてのSEH例外をすべてのエントリメソッドの最後でDLLに取り込み、ExceptionHandler :: WriteMinidumpForExceptionを手動で呼び出します。 – moggi