!!!核心思想

耐心追踪 | 大胆假设小心求证 | 对比分析 | ERROR并非ERROR异常并非异常

断点调试

https://blog.csdn.net/johnWcheung/article/details/102620497

日志打印

#打印property(android.os.SystemProperties)
getprop key#设置property
setprop *[注:persist开头的属性设置是永久保存,ro开头的属性只读,一旦设置,不能更改]#修改Settings参数
settings put secure eth_dualstack true#串口输入文本
input text ""#logcat加时间戳并过滤多个关键字
logcat -v time|grep -e xx -e xx#抓日志加时间戳、加线程号
logcat -v threadtime#日志写文件后台执行
logcat -v time > /data/log.txt &【结束先fg,再ctrl+c】
cp /data/log.txt  /mnt/sda/sda1【sync再拔掉U盘】#命令发送广播并携带参数
am broadcast -a com.android.test --es test_string "this is test string" --ei test_int 100 --ez test_boolean true#ActivityManager启动应用标志
一般情况下,我们可以将应用启动的时间分为三个时间段A, B和C。A时间段---起始标志Log是ActivityManager: START u0, 系统在这段时间内为启动的Activity创建ActivityRecord,创建或者选择合理的ActivityStack,TaskRecord,将当前Resume的Activity Pause;B时间段---起始标志Log是am_proc_start,系统在这段时间内为启动的应用创建进程;C时间段---起始标志Log是am_set_resumed_activity,这段时间内主要是调用启动Activity的onCreate,onStart,onResume,到最终界面显示结束时间计算,输出对应的Log。#打印应用启动时间
am start -W -n com.android.settings/.Settings -S#根据AMS找出启动应用的进程,根据进程号过滤应用的日志

异常分析

Java 异常处理

Android程序异常分析

Force close / ANR / Tombstone

Force close / ANR(/data/anr/traces.txt) 前两者主要是查看当前的进程或者系统框架层的状态和堆栈就基本可以分析出来

tombstone一般是由Dalvik错误、状态监视调试器、C层代码以及libc的一些问题导致的

当系统发生tombstone的时候,kernel首先会上报一个严重的警告信号(signal),上层接收到之后,进程的调试工具会把进程中当时的调用栈现场保存起来,并在系统创建了data/tombstones目录后把异常时的进程信息写在此目录里面,开发者需要通过调用栈来分析整个调用流程来找出出问题的点。

如何分析墓碑日志呢?

#执行目录:out/target/product/xxx/ symbols/system/lib

#基本工具

1.通过backtrace一栏提供的地址查询对应的符号,可以定位到文件,函数,行数

addr2line –aCfe libs $(trace_address)

2.相当于执行多次addr2line,可以直接针对一份crash log使用,会输出所有backtrace里地址对应的symbol

ndk-stack –sym $(lib_directory) –dump $(crash_log_file)

3.Dump the objectfile. 通过汇编代码定位错误的原因,大部分复杂的问题可以通过这种方式得到解决
注:需要指定交叉编译工具链如arm-linux-gnueabihf-objdump

objdump -S $(objfile) > $(output_file) //重定向写入可选

4.列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等

nm -D libdvm.so > dvm.data

注:
1、所谓符号,通常指定义出的函数,全局变量等等
2、c++filt将每个输入的名称看成是改编后的名称(mangled name),并设法确定用于生成该名称的编译器。如果这个名称是一个合法的改编名称,那么,c++filt就输出改编之前的原始名称;如果c++filt无法识别一个改编名称,那它就按原样输出该名称

通过以上工具的分析 ,我们可以得到较完整的调用栈以及调用逻辑的汇编码,然后需要结合ARM架构及ARM汇编的知识(有些情况下可能需要使用gdb)来分析出现tombstone的原因,以下是本人遇到过的一些tombstone的情况:

1.无效的函数指针:指针为NULL或者已经被重新赋值

2.strlen崩溃:导致不完全的栈信息,栈被破坏

3.FILE操作:因为stdio并非线程安全的,多线程操作时,容易出现异常

5.eg: pid: 1658, tid: 13086 >>> system_server <<<
确认问题到底发生在哪个线程中,是主线程还是子线程,这个的判断依据是—如果PIDTID相同,问题出现在父线程;如果PID和TID不相同,问题出在子线程中。

Android BUG定位相关推荐

  1. android开发如何快速定位bug_三种bug定位方法

    1.定位bug产生的过程 测试用例的执行,基本上是程序运行过程bug产生的开始,若测试结果与期望结果有出入,即出现了错误征兆,定位bug过程首先要找出bug产生的原因,然后对bug进行修正.因此定位b ...

  2. Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK

    原文:Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  3. Android App定位和规避内存泄露方法研究

    from:http://site.douban.com/android/widget/notes/350758/note/167481484/ 工作中刚好用到,网上搜到的,觉得不错,与大家分享 And ...

  4. android 定位服务 耗电吗,关于Android的定位服务

    今天因为工作须要,把以前编写的一个GPS测试法度榜样拿出来从新修改了一下.这个法度榜样说起来竽暌剐些汗青了,是我11年编写的,那时刻学了Android开辟没多久,算是一个实验性的作品.如今工作须要,从 ...

  5. Android基站定位

    Android基站定位   一.通过手机信号获取基站信息 通过TelephonyManager 获取lac:mcc:mnc:cell-id(基站信息)的解释: MCC,Mobile Country C ...

  6. 走完线上 BUG 定位最后一公里

    简介:因为线上线下环境隔离的问题,线上的输入很多时候难以在日常环境中构造,定位 bug 效率低下.是否有简单快捷的办法呢? 一个小故事 周末12点的闹钟在回龙观均价3000的出租屋急促的响起,程序员小 ...

  7. 定位系统服务器,android系统定位服务器地址

    android系统定位服务器地址 内容精选 换一换 将NFS文件系统挂载到Windows IIS服务器时,报错路径格式不支持,挂载失败.IIS Web服务器的物理路径错误.根据可能原因进行故障排查.如 ...

  8. 缺陷定位 | 如何精准效率分析推测BUG定位(二)

    点击上方"蓝字",轻松关注我们 明天就是除夕了,很多人都回到了老家,吃上了妈妈做的饭菜,这时候应该是最幸福的时刻,我也用年前上班仅剩的几小时把 缺陷定位(二)分享给大家,希望大家能 ...

  9. Android基站定位——单基站定位(二)

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8672856 基站定位原理:通过手机信号获取基站信息,然后调用第三方公开的根据基站信息 ...

最新文章

  1. Linux下基于官方源代码RPM包构建自定义MySQL RPM包
  2. 第七周实践项目5 排队看病模拟(队列)
  3. 20w7珠led驱动电源电路图_LED驱动电源:用TL431做的几个恒流电路分享!
  4. 神经网络加载数据 自建数据集 官方数据集 pytorch 显示数据集
  5. visualvm安装插件
  6. HTML参考系列(1)-文本格式化标签
  7. java不同项目加token访问_利用JWT实现前后端分离的Token验证
  8. sci的figure怎么做_一文看懂SCI论文中都有哪几种Figure
  9. Cisco Packet Tracer入门--三层交换机局域网搭建教程
  10. win10 专业版安装系统
  11. 华为路由器:AR真机忘记Console口密码的处理方法全过程演示
  12. 偶遇 649453.sys / Adware.Cdn / Hacktool.Rootkit
  13. 保持简单----纪念丹尼斯•里奇(Dennis Ritchie)
  14. ElasticSearch进阶(五)MetricBeat的简单使用
  15. Mumble安装部署教程
  16. Ass代理转实模/Convert ass proxy to model
  17. 如何计算用户生命周期天数?
  18. Unity3D-设置天空盒
  19. 代码实现把目标检测数据集的框框画在相应图片上
  20. PX4模块设计之二:uORB消息代理

热门文章

  1. 蓝鲸监控 - 服务拨测 + 自定义监控 多用户收到消息
  2. Pycharm调试scrapy报错:Unknown command: crawl Use amp;quot;scrapyamp;quot; to see available commands
  3. 电巢:人人都离不开的DRAM技术介绍
  4. 浏览器兼容:在ie edge中消除默认出现的密码框小眼睛标志
  5. 青龙2.10.13 稳定版+对接傻妞教程+短信登录+傻妞WEB控制台 超级详细
  6. 赛微微电上市首日破发:市值蒸发超15亿元,经营规模略输一筹
  7. 自动驾驶时间同步分析概述--PPS/GPRMC/PTP/全域架构时间同步方案
  8. 【template写法】TS + vue3.2 + vite2 + element-plus 通用表格组件封装
  9. 怎样把照片中的头像扶正_特别亲子照,一家三口、四口微信头像,温馨幸福
  10. TCGA数据集介绍及数据下载