我正在开发一个加载C++DLL的python应用程序。在这样的动态链接库中,我们做了所有繁重的工作,我们希望将谷歌的breakpad崩溃报告系统添加到其中。在Windows上,我们在加载DLL后实例化异常处理程序。但是,当发生崩溃时,不会调用该异常处理程序,也不会写入微转储。当我们对一个简单的C++控制台应用程序使用相同的设置时,一切都很好。显然,有什么东西阻止了异常处理程序仅在其在DLL中实例化时才被通知。
我们如何确保在DLL中调用Google的breakpad异常处理程序?
# 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、 美国:Breakpad处理程序在我们的linux版本的应用程序中运行良好,该应用程序具有相同的设置。
谢谢你的帮助。