native程序异常crash 定位解决方案

简介:

    Android程序崩溃退出的时候,会将崩溃的堆栈信息保存在/data/tombstones目录下。

该目录需要ROOT权限才能够访问。所以为了访问该路径,手机必须先ROOT破解。jni或者java

代码崩溃的信息都被记录。该目录下会有九个tombstones_0(1-9),生成的崩溃信息会循环写入

该文件中,测试之前可以讲所有的文件删除,就可以得到唯一的一个崩溃日志。生成的文件

记录了详细的堆栈信息。

    为了拷贝到电脑上,需要通过adb shell进入手机终端,然后su,获取root权限,接着

拷贝文件到sdcard上,退出adb shell,之后,通过adb pull /sdcard/tombstone_00 E:

拷贝到E盘

    该文件详细记录了代码崩溃时候的具体信息,包括了崩溃的堆栈,如果能够获取到该信息,就可以通知堆栈了解崩溃点的信息,但是一般情况下,我们看不到该文件。


    当我们发现/data目录为空的情况下,实际上表示我们没有root访问权限,(root是最高级的访问权限,而不是启动的时候的访问文件的权限,这个权限需要对android手机进行权限进行破解)


注意

    查看tombstons文件,发现很多情况下,没有提供源码错误的函数名称和源码的错误行号,可以通过ndk-stack.exe 程序对崩溃日志再次定位

    $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -dump tombstons

例子

D:\Development\Android\android-ndk-r10b\ndk-stack.exe–sym armeabi-v7a –dump E:\docs\tombston_01 > E:/detail.txt


附录:

    不同的手机遇到空指针的时候,处理的方式是不一样的,小米手机直接闪退,而华为平板依然能够直接运行,跳过崩溃的错误,说明测试多种机型的重要性。


参考

http://cmzx3444.iteye.com/blog/1463035


     本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1408644,如需转载请自行联系原作者




相关文章
|
4月前
crash —— 获取cpuinfo信息
crash —— 获取cpuinfo信息
|
5月前
|
存储 缓存 JavaScript
Electron V8排查问题之V8FatalErrorCallback崩溃问题的定义如何解决
Electron V8排查问题之V8FatalErrorCallback崩溃问题的定义如何解决
61 0
|
8月前
|
存储 监控 算法
一次通过dump文件分析OutOfMemoryError异常代码定位过程
OutOfMemoryError是Java程序中常见的异常,通常出现在内存不足时,导致程序无法运行。借助MAT内存分析工具分析可能的内存泄漏代码问题定位。
116 1
一次通过dump文件分析OutOfMemoryError异常代码定位过程
|
8月前
|
Linux
使用backtrace打印程序crash堆栈
使用backtrace打印程序crash堆栈
120 0
|
8月前
|
JavaScript IDE Java
bugly崩溃排查3:观察是谁调用了崩溃函数
bugly崩溃排查3:观察是谁调用了崩溃函数
93 0
|
Python
C调用Python的崩溃
C调用Python的崩溃
102 0
|
存储 运维 监控
mPass iOS崩溃与Crash⽇志符号化详解
在日常mPaas客户端运维中,经常遇到一些iOS闪退,无法直接从闪退堆栈看到原因。主要是因为iOS客户端上传的崩溃日志里的调用栈信息都是通过内存地址记录的,无法直接看到闪退的调用栈信息。如果需要定位到调用栈,需要使用符号表对闪退日志进行符号化。本文从日志收集、日志符号化原理、符号化工具等方向介绍下iOS下crash日志符号化方案。
2042 1
mPass iOS崩溃与Crash⽇志符号化详解
|
Java Android开发
Android Native Crash问题排查思路
Android Native Crash问题排查思路
1236 0
Android Native Crash问题排查思路
|
Unix Linux C#
iOS开发:Crash异常总结与捕获
说到异常捕获,就必须要提到Crash问题,iOS中,Crash一般分为两种: 1、一种是由EXC_BAD_ACCESS引起的,原因是访问了不属于本进程的内存地址,有可能是访问已被释放的内存; 2、一种是未被捕获的目标C异常(NSException)记录,导致程序向自身发送了SIGABRT信号而崩溃。
946 0
iOS开发:Crash异常总结与捕获