业界动态
Android Crash 定位手机定位系统「Android Crash 定位」
2025-01-12 03:14

本文介绍了如何在 Android 手机发生 Crash 时进行 Log 分析的方法
它可以帮助测试人员快速定位 Android 手机 Crash 发生的原因,同时给研发人员提供有效修改 Bug 的 Log 信息。

用自动化测试工具对 Android 手机进行压力测试和稳定性测试,往往通过模拟实际使用场景中所发生的业务量来测试手机性能是否满足要求,测试过程中系统状态信息被实时记录到 Log 文件中,通过对 Log 信息的分析,可以检查到错误发生的根源和运行痕迹,因此,有效利用 Log 信息并对其进行分析与实时的监控管理,对于分析 Android 手机发生 Crash 的原因具有极为重要的作用。

自动化测试工具在运行过程中会产生多种类型的 Log 信息,而这些 Log 信息又往往分布在不同的目录中,在超大规模的 Log 数据上做分析不是一件容易的事情,需要测试人员分析大量的脚本文件和代码去寻找自己所关心的答案。基于以上问题,本文介绍了如何进行 Log 分析的方法,有了这些方法会让 Crash 的问题定位变得简单,并让复杂的分析变得可行。

1. Android Log 文件类型

由于 Android 上的应用程序千差万别,出现的问题也不尽相同。不过 Bug类型还是有规律可循的,可以根据生成的 Log 文件找到相应的错误,通常错误信息里记录了错误的大致位置,据此可以捕获到问题的关键信息。

Log 文件记录着每次操作的信息,在出现问题后可以借助 log 信息分析以达到解决问题的目的,Log 文件类型主要分为以下几种

(1) Logcat: Main 缓存日志,通过运行 logcat 命令,可以获得系统中使用的标记和优先级的列表,也可以加上过滤器进行表达式限制,只输出测试人员及研发人员感兴趣的标记-优先级组合。
Logcat-Kernel: Kernel(Linux)信息,包括多个进程并发信息,进程所使用的内存情况,进程访问磁盘的请求等信息。
Logcat-Radio: Radio And Telephoney 信息,面向手机基本信息提供的 api,包括网络类型、连接状态、电话功能、电话号码字符串处理的实用程序等。
Logcat-Event: 系统级别的 Events,比如:垃圾回收,Activity 管理状态,系统的 Watchdogs 和其他底层 Activity

(2) Bugreport: Java 应用程序 Crash 时会产生一个 Bugreport 文件,该文件主要包括三个方面的内容
Dumpstate:内存信息,Cpu 信息,Procrank 信息,系统日志,Vm Trace 信息等。
Build.Prop:当前版本、当前命令、显示系统 Build 的一些属性等
Dumpsys:Dump Of Service Meminfo(显示某个进程更详细的内存消耗情况以及 Native And Java (Dalvik)堆栈的统计数)

(3) Crashdump: 每次 Crash 都会产生一个 Crashdump 文件,文件包括主日志,Java 堆栈信息,本地调用堆栈,虚拟机/进程堆,Log 缓存,内存信息,进程列表,Modem 信息,Adb Log 等信息

(4) Bratlog: 测试用例及详细信息

(5) Logalong: 事件,如手机通讯功能信息等

(6) Pullfs: Traces(Java 堆栈信息)

(7) Procrank: Uss(Unique Set Size) 值,进程独自占用的物理内存。

Android Crash 类型

程序员开发 android 应用程序时追逐的最终目标是要尽量避免程序 Crash 的发生。但是现实的情况是,在进行轮番测试和验证的时候,Android 应用程序几乎不可能完全杜绝 Crash 的发生。Crash 的类型主要有以下几种

(1) Java Application Crash:不完善的 Java 应用程序很容易导致 Crash 的发生如:某个应用程序由于源代码不完善,会做一些它本不应该做的操作而导致 Crash的发生。 另外,Java 虚拟机自身的 Bug、系统的库文件、Api、第三方的库文件、系统资源的短缺都有可能造成 Java Crash 的发生。

(2) System Crash:当程序试图访问不被允许访问的内存区域、指针越界、错误的访问类型、访问不存在的内存、访问不属于进程地址空间的内存、栈溢出、函数非法跳转、非法的系统调用、数据中断等操作容易引起 System Crash。

(3) Modem Crash:当手机出现无信号、死机、网络中断等现象,通常会出现 Modem Crash。

(4) Kernel Crash:由于手机应用软件出现错误而导致系统崩溃的时候,会提示 Kernel Crash 的信息,并且错误发生时 kernel 的存储图像会保存起来,当系统重新启动后,会恢复 kernel 的存储图像,然后根据现象判断是哪类错误发生。

(5) Watch Dog Crash:当手机发生 Crash 时系统停止运行,说明预先设定的Watch Dog 发生了 Crash。

Android Crash 问题定位方法

3.1 Java Application Crash

3.1.1 Java Anr Crash

手机应用程序在预先设定的时间内不响应或响应不够灵敏,系统会向用户显示一个对话框,这个对话框被称作 anr(Application No Response) Crash。这一般都是由于应用程序错误导致的,测试人员可以在 Logcat 文件中定位是哪个进程导致 anr 的发生,为什么会发生 anr,发生 anr 之前的历史日志,事件响应间隔中Cpu 的使用状态等。

当出现 Anr Crash 后,测试人员可以在 Log 文件里查找关键字:Anr,定位到的相应的关键信息,然后根据定位的具体信息再进行分析。下述示例说明了造成了 anr Crash 的三种情况

(1) Keydispatchingtimedout:测试人员在 Log 文件里查找关键字:Anr,定位到的关键信息如下所示

以 上 代 码 中 com.*.Camera 应 用 程 序 包 下 的 com.
*.Camera.Video.Videocamera 出现了 keydispatchingtimedout Anr,表示输入事件(比如:按手机键盘,触摸屏幕等操作)在预设时间之内(通常是 10 秒)无响应,当这种情况发生时,在目录/Sdcard/Bugreport/下会生成一个以当前日期命
名的文本文件,例如文件名:Bugreport-004402140726351-20111102-130045,此文本文件里记录了发生 Crash 时的多个 I/O 操作,但具体是哪个主线程引起的Crash,还需要我们做进一步的分析。通过在生成的 Bugreport 文件中搜索关键字:Dalvik Threads,可以定位到本应用程序的虚拟机信息。

从 上 面 的 代 码 中 可 以 看 到 关 键 问 题 出 现 在 java 代 码 的 468 行 : At
Com.Android.Camera. Video.Videocamera (Bitmap.Java:468)
至此,测试人员和研发人员就可以在 eclipse 开发环境中相应的 java 代码块
中去定位问题类型,然后去进一步寻找解决问题的具体方法。

(2) 在 Log 文件里查找关键字:Anr,定位到的关键信息如下所示

上 述 代 码 说 明 com.Android.Providers.Media 应 用 程 序 包 下 的
mediascannerreceiver 发生了 broadcast Timeout Anr,广播事件在 20 秒内未完成执
行。当这种情况发生时,在目录/Sdcard/Bugreport/下会生成一个以当前日期命名
的文本文件,测试人员可用类似于 keydispatchingtimedout Anr 的思路去找到问题
的所在,也可以在目录/Data/Anr/Traces.txt 下查找 Crash Log 的关键信息,最终
定位到 Java 代码行中。

(3) 在 log 文件里查找关键字 Anr,定位到的关键信息类似如下代码

以 上 代 码 说 明 com.*.Android.Debug.Jcrasher 应 用 程 序 包 下 的Jcrasherservice 发生了 Service Timeout Anr,程序对一个服务进程未完全响应。可以在/Sdcard/Bugreport/下生成的文本文件或者在/Data/Anr/Traces.Txt 文件中找到问题所在。

3.1.2 Java Uncaught Exception

还有其他一些 Java Crash 由 Java Uncaught 异常引起。对于这些异常的产生原因,又有多种情况,以下列出常见的四种

(1)在 Bugreport 文件里查找关键字:Uncaught Exception,定位到的关键

信息类似如下代码
以上内容说明问题是由 java.Lang.Nullpointerexception 引起的主线程异常退出所造成。一般情况下,Uncaught 异常发生在 androidruntime,还有很多原因使得系统杀死应用程序进程,Uncaught 异常时 sig 数值一般是 3,象以下代码中显示 Sig 数值为 9,可以断定这不是一个 uncaught Exception Crash。

(2)在 Bugreport 文件里查找关键字:Uncaught Exception,定位到的关键信息类似如下代码

以上代码说明 crash 是由 java.Lang.Illegalstateexception 引起。根据相应的应用程序包可以准确定位到 java 的代码行中。

(3)Java Heap Leak 内存泄漏。如果应用程序内存超过了所允许的限度

(24m)而导致了泄漏,在 Log 文件里会出现如下代码

(4)native Heap Leak 内存泄漏。在应用程序占用的内存超过分配的限度

(Gref)(2000). Native Crash 时,异常会发生,这时会在 log 文件里出现如下类似代码

需要说明的是 Procrank 文件可以捕获当前系统中各进程的内存使用情况,其中的 uss 值非常重要,如果 uss 值总是上升而没有下降,说明容易发生内存泄露,如果 uss 有时上升然后会下降到一个正常值,说明将不会有内存泄露发生如图 1 所示

这里写图片描述
图 1 Uss 波动图

3.2 System Crash

3.2.1 Sigsegv

Sigsegv: Segmentation Fault 意味着进程执行了一个无效的内存引用,没有物理内存对应该地址,程序可能抛出 sigsegv 异常,会在/Data/Tombstone/下找到这些信息。

(1) 搜索关键字 Sigsegv,如果定位到类似下面代码,说明发生了 data Abort异 常 , 若 发 生 这 类 问 题 , 一 般 都 是 深 层 的 so 在 调 用 时 由 于 深 层 代 码 的nullpointerreference 所导致。

(2) 搜索关键字 Sigsegv,如果定位于类似以下代码,说明地址 0xdeadd00d发生了 sigsegv 异常,这个地址发生了 dvmabort。

3.2.2 Sigill

Sigill: 非法指令异常是 cpu 处理非法指令之后所发生的一个异常,程序收到了 sigill 信号,一般就报告 illegalinstruction 错误信息。下面的代码说明地址

810003c4 发现了非法指令。

3.3 Modem Crash

顾名思义,Modem Crash 往往是由调制解调器所引起。调制解调器可以提供快速可靠的连接,使得手机能够连接到互联网,但是有些操作可能导致 ModemCrash 的发生,如:软件版本与硬件型号不兼容。当发生 Modem Crash 时,可以在生成的 kdumppdf 文件里定位到关键信息。如以下代码说明是调制解调器发生了 crash。

3.4 Kernel Crash

一旦手机发生了 kernel Crash,相关的日志信息很少,而且又很难重现,因此遇到这类问题比较难解决,比较简单的方法是:如果手机彻底被锁定,不能再使用;数字键(Num Lock)、大写锁定键(Caps Lock)、滚动锁定键(Scroll Lock)不停闪烁;手机蓝屏并且在手机屏幕上看到内核 Cp Assert 出来的信息,如出现以上任何一种现象则可以断定发生了 Kernel Crash。也可以在 Crash Dump 文件里搜索关键字:Kernel Panic,然后检查 Call Stack 信息,将会看到 Backtrace 信息。
在手机/Proc/Kpanic 目录或者 /Data/Cp_Panic.Bin 中可以找到 panic Logs,通过 adb 工具可以导出所需要的 log 信息,需要时可以将该信息提交给研发人员。

3.5 Watch Dog Crash

如测试人员在 crash Dump 文件和 event Log 文件里的最后几行代码中看到2802 标识,意味着发生了 Watch Dog Crash。

4 结论

    以上就是本篇文章【Android Crash 定位手机定位系统「Android Crash 定位」】的全部内容了,欢迎阅览 ! 文章地址:http://www78564.xrbh.cn/news/32485.html 
     文章      相关文章      动态      同类文章      热门文章      栏目首页      网站地图      返回首页 迅博思语移动站 http://www78564.xrbh.cn/mobile/ , 查看更多   
最新文章
中交地产1元“退房”:战略转型与债务困境下的断臂求生
中交地产的这次“断臂求生”,不仅是企业自救的手段,更是一种行业趋势的缩影。中房报记者 梁笑梅丨北京报道7月25日,深陷退市危
邛崃市2025年7月招聘信息第四期共30家企业
四川金忠食品股份有限公司(邛崃市新邛路517号)1.研发工艺员 1名要求:40岁以下,大专以上学历,食品类专业,具备食品(肉制品
浙江义乌“大企帮小店”探索共富新路径
方静“张大酥是专门经营养生糕点的店铺,今年初才进驻李祖。当时‘大企’主动帮我们设计了具有李祖特色的糕点套装,义乌市市场监
北京移动应急通信保障恢复怀柔区72座基站,抢通40个行政村
7月28日北京青年报记者从北京移动了解到,截至18时,北京移动已抢通怀柔区雁栖开发区至汤河口48芯光缆一条,恢复汤河口、宝山、
小猫看伤花5000元,宠主质疑:诊所每天对小猫进行抽血检查等诊疗行为属于“过度医疗”
近日,芜湖繁昌区法院参考专家辅助人的意见,引导双方申请司法鉴定。调解过程中,专家辅助人详细分析了小猫病历,明确指出检查报
克莱斯勒300C 2.7汽车配件前羊角轴头刹车盘
克莱斯勒300C/2.7三元催化器 峰哲汽车尾灯后保险杠 切诺基大灯 我公司是一家专业从事别克与克莱斯勒汽车配件销售与服务的汽配企
他们是CS上海Major的“幕后功臣”,完美电竞合作伙伴联盟成立
从2019年的第九届DOTA2国际邀请赛(TI9),到2020年的英雄联盟全球总决赛(S10)、2024年的反恐精英世界锦标赛(CS上海Major),
军事资讯AI速递:昨夜今晨军事热点一览 丨2025年8月21日
  军事领域动态复杂,事件可能迅速改变全球安全格局。我们整理了昨夜今晨最重要的军事新闻,包括关键行动和政策变化,让您清晰
刚出炉!上海崇明成功认证“国际湿地城市”,将迎来什么发展机遇?
《湿地公约》第十五届缔约方大会于7月23日至31日在津巴布韦维多利亚瀑布城举行。全球共16个国家31个城市获得第三批“国际湿地城
疑似OPPO Find X9 Pro核心硬件曝光:搭载天玑9500 主频突破4GHz
【TechWeb】去年10月,OPPO推出了OPPO Find X8 Pro,这是全球首款配备双潜望长焦的天玑旗舰,拥有一颗5000万像素3倍索尼LYT-600