cocos2dx使用googlebreakpad收集崩溃日志

来源:互联网 发布:红衣军 知乎 编辑:程序博客网 时间:2024/06/07 04:40

Googlebreakpad:SUN下载地址:http://google-breakpad.googlecode.com/svn/trunk

搭建环境:

NDK版本:

r10C以上,因r10c版本补齐了<sys/user.h>和<sys/ucontext.h>

本人使用r10d版本:下载链接:

https://dl.google.com/android/ndk/android-ndk-r10d-linux-x86_64.bin

编译环境:window和linux均可,但是解析崩溃dump文件需要linux

步骤一:

把googlebreakpad文件放到工程平级目录:

步骤二:

把breakpad文件链接到工程中,仿照cocos2d文件夹设置,此步骤是为了方便调试。

完成后目录结构如下:

步骤三:

修改jni/Android.mk文件,加入breakpad/android/google_breakpad/Android.mk文件,编译动态库。

文件修改如下:


添加动态链接库:LOCAL_STATIC_LIBRARIES+= breakpad_client

导入googlebreakpad的Android.mk:注意路径。

$(call import-module,../../breakpad/android/google_breakpad)

步骤四:

这时,编译工程,会出错,因为googlebreakpad的Android.mk文件LOCAL_SRC_FILES缺少导入文件。

添加完毕后如下:

  // 缺少文件如下:

src/client/linux/microdump_writer/microdump_writer.cc\

    src/client/linux/dump_writer_common/seccomp_unwinder.cc\

   src/client/linux/dump_writer_common/thread_info.cc \

   src/client/linux/dump_writer_common/ucontext_reader.cc \

   ../cocos2d/external/ConvertUTF/ConvertUTF.c \

#    src/common/convert_UTF.c \

 

其中把 src/common/convert_UTF.C 替换成

cocos2d/external/ConvertUTF/ConvertUtf.c,否则会出现重复定义错误:multiple definition of 'ConvertUTF8toUTF16'等等一堆类似的错误。

相应的,需要把src/common/string_conversion.cc中的

#include "common/convert_UTF.h"替换成

#include "../../cocos2d/external/ConvertUTF/ConvertUTF.h"

如图:

恭喜,这时就可以编译通过了。

步骤五:把googlebreakpad使用到工程中:

我是放在main.cpp中:

其中:google_breakpad::MinidumpDescriptordescriptor("/mnt/sdcard");表示dump文件保存的文件目录,一定是已经创建好的目录。

步骤六:随便写一个崩溃,捕获日志dmp:

 

怎样查看这个崩溃信息:必须在linux设备下。

使用的到的工具:

dump_symsbreakpad/src/tools/linux/dump_syms/dump_syms

minidump_stackwalkbreakpad/src/processor/minidump_stackwalk

busybox系统自带

 

步骤一:编译工具
      cd breakpad
进入文件目录
      ./configure 
执行googlebreakpad自带的配置工具
      make
编译googlebreakpad,完成后生成 dump_syms(有window版本的exe文件)和minidump_stackwalk(这个没有找到window版本)。

 

步骤二:使用工具查找崩溃日志:

为了方便我们把dump_symsminidump_stackwalk还有崩溃日志 0e879430-1591-82d1-453ea515-3b41513b.dmp放在同一文件夹下面。

另外还需要库文件libcocos2dcpp.so(这里必须使用/proj.android/obj/local/armeabi下生成的)注意libs/armeabi/libcocos2dcpp.so这个不可以哦!

 

1.   ./dump_syms libcocos2dcpp.so >libcocos2dcpp.so.sym

2.    使用busyboxhead -n1 libcocos2dcpp.so.sym可以得到第一行:

MODULELinux arm 87C34A3F51EC6572E561D3ACF67A82AA0libcocos2dcpp.so

3.    mkdir-p ./symbols/libcocos2dcpp.so/87C34A3F51EC6572E561D3ACF67A82AA0

4.    mvlibcocos2dcpp.so.sym ./symbols/libcocos2dcpp.so/87C34A3F51EC6572E561D3ACF67A82AA0/

5.    最后生成crash文件:./minidump_stackwalk0e879430-1591-82d1-453ea515-3b41513b.dmp ./symbols/ > crash.log

6.    使用gedit查看crash.log:发现String.cpp 60行报错方法是Text::setString

 

 

0 0
原创粉丝点击