使用google breakpad生成dump文件

使用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.cpp 

就拿上面windows的例子來說,代碼如下。

#include <cstdio>
#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://zhangyafeikimi.iteye.com/blog/384351

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章