android系统问题常用命令

性能分析:

-Android studio的工具
Memory Monitor工具主要是用来监测APP的内存分配情况,判断是否存在内存泄漏
Dump Java Heap定位内存泄漏, 生成.hprof
Eclipse: ddms->update heap->cause gc生成总内存信息,然后会有data object

-运行时错误分析
/data/tombstones
全志平台:/mnt/extsd/tombstones
addr2line 工具和 objdump 工具来定位backtrace错误
工具位置:windows: ndk\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin

  • arm-linux-androideabi-addr2line -C -f -e libss.so 00026cb3

-e 选项来指定可执行libss.so
-f 选项,可以告诉工具输出函数名

  • arm-eabi-objdump -S libss.so > dvb_map.txt

-查看内存占用空间
adb shell procrank
adb shell dumpsys meminfo <package_name>/pid内查看本地层程序

-查看磁盘占用空间
du -sH * 查看当前目录下文件空间
df 查看分区占用空间

按键事件:

adb shell getevent –t 查看当前按下按键的值
在这里插入图片描述
事件类型(0001),事件代码(0074)以及事件的值(00000001)
adb shell getevent /dev/input/event2 获取event2设备的事件
adb shell input keyevent 4 返回按键

卡顿内容等性能分析:

traceview和systrace
Systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等, TraceView可视化工具可以看出代码在运行时的一些具体信息,方法调用时长,次数,时间比率,了解代码运行过程的效率问题,从而针对性改善代码
先使用traceview寻找当前程序有否有重复调用或者执行时间较长的函数,其次是代码分析,寻找可疑点,如果前面两步都不能准确定位的话,这时候就可以考虑用systrace
TraceView用法

  1. Ddms打开, Start Method Profiling->操作界面->stop, 操作最好不要超过5s
  2. android.os.Debug.startMethodTracing();和android.os.Debug.stopMethodTracing();然后在sdcard目录下生产trace文件,然后eclipse打开
    Systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等
    Java层的通过android.os.Trace. beginSection(“Fragement_onCreateView”);类完成,native层通过ATrace宏完成ATRACE_CALL

利用anr日志:

- java层:
/data/anr/trace.txt
可以通过修改系统属性dalvik.vm.stack-trace-file改变trace文件路径, 默认路径为/data/anr/traces.txt

- Native层:
添加代码直接抓取
Google 默认提供了CallStack API,请参考
system/core/include/libutils/CallStack.h
system/core/libutils/CallStack.cpp
可快速打印单个线程的backtrace

自动抓取
Natice层的进程发生异常后一般都在/data/tombstones目录下生成文件
arm-linux-androideabi -addr2line-f -C -e symbols address

MTK工具
利用debuggerd抓取Native backtrace的tool RTT(Runtime Trace),对应的执行命令是:

USAGE : rtt[-h] -f function -p pid [-t tid]
-ffuncion : current support functions: bt (Backtrace function)
-ppid : pid to trace
-ttid : tid to trace
nname : process name to trace
-h : help menu

-Kernel层

  • AEE/RTT 工具
  • cat proc/pid/task/tid/stack
  • proc/kmsg
    adbshell cat proc/kmsg > kmsg.txt
    adbshell "echo 8 > proc/sys/kernel/printk“ //修改printk loglevel
    adbshell "echo t > /proc/sysrq-trigger“ //打印所有的backtrace
    adbshell "echo w > /proc/sysrq-trigger“//打印’-D’ status’D’的 process

猜你喜欢

转载自blog.csdn.net/zhzhangnews/article/details/92383355