在Android上玩google-breakpad(崩溃日志收集)

准备:把ndk目录加到$PATH。

首先得到代码

svn co http://google-breakpad.googlecode.com/svn/trunk breakpad

然后把整个代码目录breakpad复制一份,一份用来编译linux的tool,一份编android的静态库。

编译Tool:

cd breakpad
chmod +x configure
./configure
make

编译Android静态库:

cd breakpad
SYSROOT=$android-ndk-r8d/platforms/android-8/arch-arm
export CC="arm-linux-androideabi-gcc --sysroot=$SYSROOT"
./configure --disable-processor --disable-tools --host=arm-linux-androideabi

然后新建一个terminal(为了把export CC的效果去除),继续:

cd breakpad
cd android/sample_app
ndk-build

这样就能编出示例程序。

加到自己的程序:

在自己的Android.mk里加入

include $(LOCAL_PATH)/src/breakpad/android/google_breakpad/Android.mk

C/C++代码里加入:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <jni.h>
#include <assert.h>
#include <android/log.h>
#include "client/linux/handler/exception_handler.h"

static google_breakpad::ExceptionHandler *handler = NULL;

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
{
	google_breakpad::MinidumpDescriptor descriptor("/sdcard");
	handler = new google_breakpad::ExceptionHandler(descriptor,
			  NULL,
			  NULL,
			  NULL,
			  true,
			  -1);
	return JNI_VERSION_1_6;
}

在JNI_Onload里注册client。

然后java代码里加载你的so。

System.loadLibrary("MySo");

如果崩溃了,会在/sdcard/下生成 UUID.dmp(UUID是真的一串UUID)。

把UUID.dmp拷贝出来,然后参考这个做。

http://blog.csdn.net/brook0344/article/details/20126351

得到崩溃堆栈文本后,使用addr2line来把函数地址转换成代码行

参考这个:

http://blog.csdn.net/yanzheng1113/article/details/8148091

时间: 2024-10-25 17:19:06

在Android上玩google-breakpad(崩溃日志收集)的相关文章

代码混淆-android混淆代码后崩溃日志中不显示行号的问题

问题描述 android混淆代码后崩溃日志中不显示行号的问题 android混淆代码后崩溃日志中不显示行号,找崩溃的地方很不方便,如何解决,求大神指点,谢谢! 解决方案 问题已解决.原因是在混淆代码时默认会去掉class文件中的调试信息(源码的行号.源文件信息等),需要在混淆配置文件中申明保持这些信息: -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable 解决方案二: tks, 这个问题

android 铃音-一个播放铃音的Helloworld,手机上一运行就崩溃,请帮看看问题在哪?

问题描述 一个播放铃音的Helloworld,手机上一运行就崩溃,请帮看看问题在哪? 几乎是照抄网上文章的代码,想实际点击button1播放手机铃音,点button2停止,结果在在手机上测试,一点击,APP就崩溃关闭了,请问是哪里不对? import java.io.IOException; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.RingtoneManag

欧盟调查出炉,Google在Android上的授权有垄断之虞、阻碍创新

Android 是 Google旗下免费.开源的操作系统平台,但 Google 却因这"免费"的平台,被欧盟指控违反反托拉斯法,伤害使用者.扼杀竞争者.限制创新.何以欧盟对 Google Android 以如此严重的指控? 欧盟调查 Android 违反反拖拉斯法的文件出炉,欧盟在 20 日发布新闻稿,指欧盟执委会竞争政策总署对于 Google 在 Android 操作系统以及应用程序的授权条款有所异议,主要是 Google 滥用自己的领先地位,对想要获得 Android 授权的手机制

CVE-2017-0780:一张GIF图,让最新版Android短信应用无限崩溃

本文讲的是CVE-2017-0780:一张GIF图,让最新版Android短信应用无限崩溃,有没有想过,一张看起来似乎是每个人随时都能欣赏到的GIF图,其实能够造成你的Android短信应用崩溃呢? 我们最近报告给Google的一个拒绝服务(DoS)漏洞就能实现这一点.该漏洞为CVE-2017-0780,主要目标为最新版的Nexus以及Pixel设备.通过发送格式不正确的彩信(MMS),该安全漏洞可以允许攻击者非法和远程地瓦解其受害者的Android消息应用程序,致其完全崩溃.即使设备/系统重新

Android平台日志收集系统

Android平台日志收集系统       在产品开发测试中以及产品投放到终端客户后,我们经常会遇到各种各样的问题,产品出异常,比较严重的就是使用过程中死机,用户无法操作.对于这种情况,将问题反馈给研发,问题能够快速重现的研发还比较好解决,有些问题不常见,研发短时间内也很难找到问题根源.为了提高研发的效率,那么每次出异常的时候我们都最好有系统的打印系统,通过系统打印异常的蛛丝马迹去查找问题的元凶.但是有时出问题的时候,系统都已经死机或者无法操作了,也就不能通过操作去抓系统打印了,因此引入日志收集

android上 用ffmpeg解码rtp组播流

问题描述 android上 用ffmpeg解码rtp组播流 android上 用ffmpeg解码rtp组播流,avformat_find_stream_info这一步总是失败,错误信息是 Connection timed out,同样的代码linux下测试是没问题的,移植到android后就不行,这是为什么呢? 解决方案 Connection timed out 连接超时.看看网络处理是否正确!! 解决方案二: 权限,看看权限,打印一些日志.安卓上的各位权限都看看! 解决方案三: 我也遇到这个问

编译可在Android上运行的依赖库(一):glib库

编译可在Android上运行的依赖库(一):glib库 作者:寻禹@阿里聚安全 前言 这是系列文章,它们由<编译可在Android上运行的glib库>及其他4篇文章组成,这4篇文章在"编译依赖库"一节中列出.由于glib库依赖于其他第三方库,所以需要先将依赖的第三方库交叉编译到Android平台上才能成功的编译glib库,系列文章中除<编译可在Android上运行的glib库>外的其他交叉编译文章均是介绍如何对glib依赖库进行交叉编译.以上,所以叫系列文章,因

iOS 捕获程序崩溃日志

  我们常常会遇到iPhone手机或者iPad平板上运行APP崩溃的问题,有时候打开某个APP,却一下子"闪退"了.对于开发者来说,这个绝对是头疼的问题.那么如何获取到iOS设备崩溃日志呢?这个提供一些简单的方法,共开发者与用户沟通使用. iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者? 下面就介绍如何在iOS中实现: 1. 在程序启动时加上一个异常捕获监听,用来处理程序崩溃时的回调动作 代码如下: NSSetUncaughtExceptionHan

如何在Android中捕获cocos的崩溃信息

问题描述 如何在Android中捕获cocos的崩溃信息 需要手机Android项目中的崩溃信息到文件中,然后上传服务器.我现在知道怎么收集Android的崩溃信息到文件中,也知道如何上传服务器.但是我的项目中有cocos的代码,我怎么能收集到cocos的崩溃信息呢? 我看过http://www.cnblogs.com/lancidie/archive/2013/04/13/3019349.html这里面的内容,想试着做出来,但是在把jni部分的代码粘进去以后,出现了很多错误,代码如下: #in