android的崩溃报告(crash dump)

转自:http://blog.csdn.net/john_crash/article/details/46877959

ACRA (Application Crash Report For Android)就是为了解决android 应用程序崩溃以后的发送报告的问题。 
你能在https://github.com/ACRA找到源代码。 
其中https://github.com/ACRA/acra/wiki/BasicSetup页详细的介绍了使用方法。 
注意ACRA仅能俘获java的异常,它不能俘获native c/c++异常。 
如果你想俘获native c/c++异常请看我的另一篇微博 
http://blog.csdn.net/john_crash/article/details/46971535 
我这里举一个我的例子。我的程序希望在崩溃以后将信息写入到crash.dump文件。然后程序下回启动的时候发送到我的服务器上。 
默认你可以让acra给你发email,或者上传到你的服务器等等一些选项。 
而我将崩溃信息写到本地文件中。

package org.cocos2dx.cpp;

import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.acra.collector.CrashReportData;
import org.acra.sender.ReportSender;
import org.acra.sender.ReportSenderException;
import org.acra.ACRA;
import org.acra.ACRAConstants;
import org.acra.ReportField;

import android.content.Context;


public class ACRASender implements ReportSender {
    private final Context mContext;
    public ACRASender(Context ctx){
        mContext = ctx;
    }
    @Override
    public void send(Context arg0, CrashReportData arg1)
            throws ReportSenderException {
        /*
         * write to dump file
         */
        String dumpString = buildBody(arg1);
        try{
            FileOutputStream stream = mContext.openFileOutput("crash.dump",Context.MODE_PRIVATE);
            stream.write(dumpString.getBytes());
            stream.flush();
            stream.close();
        }catch(FileNotFoundException e){
        }catch(IOException e){
        }
    }
    private String buildBody(CrashReportData errorContent) {
        ReportField[] fields = ACRA.getConfig().customReportContent();
        if(fields.length == 0) {
            fields = ACRAConstants.DEFAULT_MAIL_REPORT_FIELDS;
        }

        final StringBuilder builder = new StringBuilder();
        for (ReportField field : fields) {
            builder.append(field.toString()).append("=");
            builder.append(errorContent.get(field));
            builder.append('\n');
        }
        return builder.toString();
    }
}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

然后在你的activity中加入下面的代码

public void onCreate(){
    ACRAConfiguration config = ACRA.getConfig();
    ACRA.init(this.getApplication(),config);
    ACRASender mySender = new ACRASender(this);
    ACRA.getErrorReporter().setReportSender(mySender);

    ....
    super.onCreate();
  }
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注意: 
将acra-4.x.x.jar复制到你的libs目录下面。 
你可以在http://search.maven.org/#search%7Cga%7C1%7Cch.acra找到这个文件。

做了这些后如果你的程序崩溃,在/data/data/”your application id”/files/下将产生一个crash.dump文件。


Android的coredump是指系统或应用程序由于某些错误而崩溃时,生成的一种二进制文件,包含了崩溃时的内存状态和寄存器信息等调试信息。这个文件可以帮助开发人员定位和解决崩溃问题。 在Android中,生成coredump的方式有多种,其中最常用的是通过adb命令行工具获取。具体步骤如下: 1. 连接Android设备到电脑,并打开调试模式。 2. 在电脑上打开命令行工具,输入以下命令: ``` adb shell ``` 3. 进入设备的shell环境后,输入以下命令: ``` su ``` 4. 获取正在运行的应用程序的PID号,例如: ``` ps | grep com.example.app ``` 5. 使用gdbserver启动应用程序,并将coredump写入指定文件中,例如: ``` gdbserver :5039 --attach <PID> --core <filename> ``` 其中,`:5039`是gdbserver监听的端口号,`<PID>`是应用程序的进程ID,`<filename>`是coredump文件的保存路径和文件名。 6. 在另一个终端窗口中,打开gdb调试工具,连接到gdbserver,并加载coredump文件,例如: ``` arm-linux-androideabi-gdb <path-to-binary> -ex "target remote :5039" -ex "core-file <filename>" ``` 其中,`<path-to-binary>`是应用程序的可执行文件路径,`<filename>`是coredump文件的路径和文件名。 7. 在gdb调试界面中,可以使用各种命令分析coredump文件的信息,例如查看寄存器状态、打印堆栈信息等。 需要注意的是,获取coredump文件需要root权限,而且对于系统级的crash,可能需要特殊的配置和调试工具才能捕获到完整的信息。此外,coredump文件可能会包含敏感信息,需要注意保密。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值