Android Crash Analysis

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zoosenpin/article/details/80883081

1 Framework Crash
1.1 日志文件路径
@ /data/anr/trace.txt

1.2 bugreport
bugreport dump开始 - vibrator震动一下
bugreport dump结束 - vibrator震动3次

1.2.1 ChkBugReport下载
ChkBugReport工具for Android
https://blog.csdn.net/wxlinwzl/article/details/70228503

1.2.2 获得并解析bugreport文件
adb shell bugreport > bugreport.txt

java -jar e:\chkbugreport-0.4-185.jar bugreport.txt

1.2.3 URLs
一键分析Android的BugReport
https://blog.csdn.net/xl19862005/article/details/80687881

Android adb bugreport工具分析和使用
https://blog.csdn.net/createchance/article/details/51954142

2 Linux Kernel动态log
- 需在内核中配置CONFIG_DYNAMIC_DEBUG,并且将debugfs挂载到某个文件夹mount -t debugfs none /sys/kernel/debug/
- 通过echo -n "file xxxxxx.c +p" > /sys/kernel/debug/dynamic_debug/control来打开调试信息

3 Linux Strace
3.1 LSM(Linux Security Module)的五种实现
SELinux:Security Enhanced Linux,基于inode,Android当前使用的就是这种
SMACK:Simple Mandatory Access Control Kernel,基于inode
Tomoyo:日本女人名“智代”,日本人实现的代码,基于path
AppArmor:应用盔甲
Yama:来自梵文,中文名为“阎罗”,只处理ptrace和文件链接

3.2 Strace
Linux 下 strace 命令用法总结
https://blog.csdn.net/u013920085/article/details/51829398

3.3 How To Enable Userspace Dump Stack
prctl(PR_SET_DUMPABLE, 1);
add this code to rild.

需要添加的sepolicy权限如下:
allow xxx self:capability dac_override;

4 Trace32常用命令
4.1 内核DEBUG时需要打开的MACRO
CONFIG_DEBUG_SPINLOCK = y
CONFIG_MSM_T2_LOG = n         - 读写内存冲掉

4.2 查看CPU调用栈
- 先填写寄存器
fp(R11)
ip(R12)
sp(R13)
pc(pc)
R0 到 R10
- 填写完成后
v.f
- 假如不写寄存器参数,直接输入v.f,那么输出的是CPU最后的call stack。

4.3 查看运行队列
View -> Symbols -> Browse -> 输入“runqueues” -> 显示的是基地址base
v.v __per_cpu_offset -> 显示的是偏移地址offset
v.v (struct rq *)(base + offset)

4.4 显示函数的汇编代码
d.l <函数名字>
例如:d.l fli_printf

4.5 数据格式
选中一个对象,右键选择“Format”,勾选“Hex”或者“String”。

4.6 RPM RAM Dump
hansei.py --elf rpm.elf --output my_rpm.log --verbose dumpfile CODERAM.BIN DATARAM.BIN MSGRAM.BIN

5 Watchdog
5.1 bark
如果是死锁的情形,导致pet_watchdog_work没有办法执行,但是kernel能够响应中断。这个情形就会出现dog-bark。

5.2 bite
如果是CPU hang了或者当前CPU执行了CPSID(spin_lock_irqsave()就会调用这个指令)导致系统超时无法响应中断(例如核间中断IPI - ping other cpu),到时间会触发bite。HW interrupt dog-bite是有TZ接管的。

6 Diag命令格式
CMD_CODE                 - 1 Bytes
SUBSYS_ID                  - 1 Bytes
SUBSYS_CMD_CODE   - 2 Bytes

6.1 ffbm例子 - Fast Factory Boot Mode
CMD_CODE                 - 1 Bytes,75
SUBSYS_ID                   - 1 Bytes,11
SUBSYS_CMD_CODE   - 2 Bytes,0,53
FFBM_CMD_DODE       - 2 Bytes,0,0
RESERVED                   - 2 Bytes,0,0
RESERVED                   - 2 Bytes,0,0

7 Abbreviations
DAC:Discretionary Access Control,自主访问控制
LSM:Linux Security Module

猜你喜欢

转载自blog.csdn.net/zoosenpin/article/details/80883081