今天給大家介紹一個在linux下如何捕獲程式崩潰異常的方法 一、google breakpad源碼的下載和編譯 1、https://github.com/google/breakpad.git,源碼地址,git clone XXX克隆即可 2、cd breakpad 3、./configure 4、 ...
今天給大家介紹一個在linux下如何捕獲程式崩潰異常的方法
一、google breakpad源碼的下載和編譯
1、https://github.com/google/breakpad.git,源碼地址,git clone XXX克隆即可
2、cd breakpad
3、./configure
4、make
5、make完這裡會報錯breakpad/src/third_party/lss/linux_syscall_support.h沒有這個文件,編譯時會出現這個錯誤
6、該文件可在https://chromium.googlesource.com/linux-syscall-support/下載,並放到breakpad/src/third_party/lss/
中,若實在無法FQ下載的同學,可以在以下鏈接下載linux_syscall_support.h:
http://download.csdn.net/detail/bingzhongdehuoyan/9716614
7、再次執行3和4,即可成功
二、如何使用
1 #include "client/linux/handler/exception_handler.h" 2 3 // 寫完minidump後的回調函數 4 static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* context, bool succeeded) 5 { 6 printf("Dump path: %s\n", descriptor.path()); return succeeded; 7 } 8 // 觸發crash來測試 9 void crash() 10 { 11 volatile int* a = (int*)(NULL); *a = 1; 12 } 13 14 int main(int argc, char* argv[]) 15 { 16 // 初始化 17 ExceptionHandler google_breakpad::MinidumpDescriptor descriptor("/tmp"); 18 // minidump文件寫入到的目錄 19 google_breakpad::ExceptionHandler eh(descriptor, NULL, dumpCallback, NULL, true, -1); crash(); 20 return 0; 21 }
1、這樣就會在/tmp下生成.dmp文件
2、為了生成可讀的stack trace, breakpad需要你將binaries里的調試符號(debugging symbols)轉換成基於文本格式的symbol files。
3、接著運行 dump_syms
命令來生成 symbol files,如下:$ google-breakpad/src/tools/linux/dump_syms/dump_syms ./test > test.sym
4、breakpad包含一個叫做 minidump_stackwalk
的工具來將 minidump 文件,外加symbol files來生成一個人可讀的stack trace
5、$ google-breakpad/src/processor/minidump_stackwalk minidump.dmp test.sym > test.txt
6、test.txt就是最終生成的可讀的異常文件用於分析