【发布时间】:2017-08-17 10:52:15
【问题描述】:
我正在开发一个加载 C++ DLL 的 python 应用程序。在这样的 DLL 中,我们完成了所有繁重的工作,我们希望将 Google 的 breakpad 崩溃报告系统添加到其中。在 Windows 上,一旦加载了 DLL,我们就会实例化一个异常处理程序。但是,当发生崩溃并且永远不会写入 minidump 时,永远不会调用该异常处理程序。当我们对一个简单的 C++ 控制台应用程序使用相同的设置时,一切正常。显然有些东西会阻止异常处理程序仅在它在 DLL 中实例化时才被通知。
我们如何确保在 DLL 中调用 Google 的 breakpad 异常处理程序?
以下是我们使用的设置。框架是在我们开始使用 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;
};
附: : Breakpad 处理程序在我们具有相同设置的 linux 版本的应用程序中运行良好。
感谢您的帮助。
【问题讨论】:
标签: c++ windows dll crash-reports google-breakpad