系统稳定性调试笔记

本文详细介绍了Android系统稳定性调试的各种方法,包括如何抓取进程Backtrace、解析内存信息、监控线程状态、理解Monitor原理、严格模式(StrictMode)的使用以及处理内存泄漏和资源冲突。此外,还探讨了线程导致的OOM异常及其对其他线程的影响。
摘要由CSDN通过智能技术生成

手动抓取进程的Backtrace方法如下:
adb remount
adb shellchmod 0777 data/anr
adb shellkill -3 pid
adb pull/data/anr

ramdisk img 是gzip文件,改后缀解压即可看到其中的文件
smali baksmali 命令转换dex、odex文件

ad shell
gdbserver --attach :5039 PID 执行完GDB处于监听状态
启动客户端 gdbclient :5039 PID
内存:
adb shell cat proc/meminfo
adb shell cat proc/pid/maps
adb shell cat proc/pid/smaps
adb shell procrank
adb shell procmem pid
adb shell dumpsys meminfo pid

arm-linux-androideabi-addr2line -f -C -e symbols address 解析抓回的Native Backtrace, 从而知道当时正在执行的native 代码
Kernel Backtrace抓取:
adb shell cat proc/kmsg > kmsg.txt
adb shell "echo 8 > proc/sys/kernel/printk“ //修改printk loglevel
adb shell "echo t > /proc/sysrq-trigger“ //打印所有的backtrace
adb shell "echo w > /proc/sysrq-trigger“//打印’-D’ status ‘D’ 的 process

Monitor
进入区(Entrt Set):表示线程通过synchronized要求获取对象的锁
拥有者(The Owner):表示某一线程成功竞争到对象锁。
等待区(Wait Set):表示线程通过对象的wait方法,释放对象的锁,并在等待区等待被唤醒。
同一时刻Monitor 只能被一个线程拥有,该线程就是 “Active Thread”,而其它线程都是 “Waiting Thread”,分别在两个队列 “ Entry Set”和 “Wait Set”里面等候。在 “Entry Set”中等待的线程状态是 “Waiting for monitor entry”,而在“Wait Set”中等待的线程状态是 “in Object.wait()”。

in Object.wait():等待区等待,状态为WAITING或TIMED_WAITING。
waiting for monitor entry:进入区等待,状态为BLOCKED。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值