使用google breakpad生成dump文件 叁歲伎倆 2021-11-10 16:22 351阅读 0赞 使用google breakpad生成dump文件 breakpad的主要功能就是生成dump文件,还可以将dump文件发送的远程http服务器。 breakpad的SVN在这里http://google-breakpad.googlecode.com/svn/trunk linux,mac,solaris,windows下面产生dump文件的例子文件在这几个文件里面,他们的流程几乎是一样的。 src/client/linux/handler/exception\_handler\_test.cc src/client/mac/handler/exception\_handler\_test.cc src/client/solaris/handler/exception\_handler\_test.cc src/processor/testdata/test\_app.cc 首先编译breakpad中的exception\_handler库,然后链接过去就可以了。 另外src\\client\\windows\\tests\\crash\_generation\_app这个测试工程总是dump失败,谁知道告诉我。 mozilla有一个完全跨平台的dump toolkit,在这里可以找到源代码 [http://mxr.mozilla.org/mozilla/source/toolkit/crashreporter/nsExceptionHandler.h][http_mxr.mozilla.org_mozilla_source_toolkit_crashreporter_nsExceptionHandler.h] [http://mxr.mozilla.org/mozilla/source/toolkit/crashreporter/nsExceptionHandler.cpp][http_mxr.mozilla.org_mozilla_source_toolkit_crashreporter_nsExceptionHandler.cpp] 就拿上面windows的例子来说,代码如下。 C++代码 收藏代码 \#include \#include “client/windows/handler/exception\_handler.h” namespace \{ static bool callback(const wchar_t *dump_path, const wchar_t *id, void *context, EXCEPTION_POINTERS *exinfo, MDRawAssertionInfo *assertion, bool succeeded) { if (succeeded) { printf("dump guid is %ws\n", id); } else { printf("dump failed\n"); } fflush(stdout); return succeeded; } static void CrashFunction() { int *i = reinterpret_cast<int*>(0x45); *i = 5; // crash! } \} // namespace int main(int argc, char \*\*argv) \{ google\_breakpad::ExceptionHandler eh( L".", NULL, callback, NULL, google\_breakpad::ExceptionHandler::HANDLER\_ALL); CrashFunction(); printf(“did not crash?\\n”); return 0; \} 运行完之后会在当前目录下生成一个dmp文件,用windbg打开,在命令行中输入.ecxr,然后查看调用崩溃现场,图片如下。 其他平台可以用gdb查看崩溃现场。 [http_mxr.mozilla.org_mozilla_source_toolkit_crashreporter_nsExceptionHandler.h]: http://mxr.mozilla.org/mozilla/source/toolkit/crashreporter/nsExceptionHandler.h [http_mxr.mozilla.org_mozilla_source_toolkit_crashreporter_nsExceptionHandler.cpp]: http://mxr.mozilla.org/mozilla/source/toolkit/crashreporter/nsExceptionHandler.cpp
还没有评论,来说两句吧...