<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    常用鏈接

    統計

    最新評論

    Android Log Analysis

    轉自 http://chaozhong84.spaces.live.com/blog/cns!FC149E9A3FC0182B!297.trak

    【Android】【轉】Android Log Analysis

    ---------------------------------------------------

    本文原創,轉載請注明出處,如有錯誤之處歡迎指出

    ---------------------------------------------------

    Get Log from Android System

    adb bugreport > bugreport.txt

    copy bugreport to the current directory.

    bugreport里面包含了各種log信息,大部分log也可以通過直接運行相關的程序來直接獲得.

    步驟如下:

    1.adb shell 2.進入相關工具程式的目錄 3.執行相關程式 4.得到相關信息

    下面以輸出進程信息為例 1.adb shell 2.輸入ps -P 3.可以看到相關進程信息

    Log Archive Analysis

    1.bugreport

    bugreport記錄android啟動過程的log,以及啟動后的系統狀態,包括進程列表,內存信息,VM信息等等到.

    2.bugreport結構分析

    (1)dumpstate

    MEMORY INFO

    獲取該log:讀取文件/proc/meminfo

    系統內存使用狀態

    CPU INFO

    獲取該log:執行/system/bin/top -n 1 -d 1 -m 30 -t

    系統CPU使用狀態

    PROCRANK

    獲取該log:執行/system/bin/procrank

    執行/system/xbin/procrank后輸出的結果,查看一些內存使用狀態

    VIRTUAL MEMORY STATS

    獲取該log:讀取文件/proc/vmstat

    虛擬內存分配情況

    vmalloc申請的內存則位于vmalloc_start~vmalloc_end之間,與物理地址沒有簡單的轉換關系,雖然在邏輯上它們也是連續的,但是在物理上它們不要求連續。

    VMALLOC INFO

    獲取該log:讀取文件/proc/vmallocinfo

    虛擬內存分配情況

    SLAB INFO

    獲取該log:讀取文件/proc/slabinfo

    SLAB是一種內存分配器.這里輸出該分配器的一些信息

    ZONEINFO

    獲取該log:讀取文件/proc/zoneinfo

    zone info

    SYSTEM LOG(需要著重分析)

    獲取該log:執行/system/bin/logcat -v time -d *:v

    會輸出在程序中輸出的Log,用于分析系統的當前狀態

    VM TRACES

    獲取該log:讀取文件/data/anr/traces.txt

    因為每個程序都是在各自的VM中運行的,這個Log是現實各自VM的一些traces

    EVENT LOG TAGS

    獲取該log:讀取文件/etc/event-log-tags

    EVENT LOG

    獲取該log:執行/system/bin/logcat -b events -v time -d *:v

    輸出一些Event的log

    RADIO LOG

    獲取該log:執行/system/bin/logcat -b radio -v time -d *:v

    顯示一些無線設備的鏈接狀態,如GSM,PHONE,STK(Satellite Tool Kit)...

    NETWORK STATE

    獲取該log:執行/system/bin/netcfg (得到網絡鏈接狀態)

    獲取該log:讀取文件/proc/net/route (得到路由狀態)

    顯示網絡鏈接和路由

    SYSTEM PROPERTIES

    獲取該log:參考代碼實現

    顯示一些系統屬性,如Version,Services,network...

    KERNEL LOG

    獲取該log:執行/system/bin/dmesg

    顯示Android內核輸出的Log

    KERNEL WAKELOCKS

    獲取該log:讀取文件/proc/wakelocks

    內核對一些程式和服務喚醒和休眠的一些記錄

    KERNEL CPUFREQ

    (Linux kernel CPUfreq subsystem) Clock scaling allows you to change the clock speed of the CPUs on the fly.

    This is a nice method to save battery power, because the lower the clock speed is, the less power the CPU consumes.

    PROCESSES

    獲取該log:執行ps -P

    顯示當前進程

    PROCESSES AND THREADS

    獲取該log:執行ps -t -p -P

    顯示當前進程和線程

    LIBRANK

    獲取該log:執行/system/xbin/librank

    剔除不必要的library

    BINDER FAILED TRANSACTION LOG

    獲取該log:讀取文件/proc/binder/failed_transaction_log

    BINDER TRANSACTION LOG

    獲取該log:讀取文件/proc/binder/transaction_log

    BINDER TRANSACTIONS

    獲取該log:讀取文件/proc/binder/transactions

    BINDER STATS

    獲取該log:讀取文件/proc/binder/stats

    BINDER PROCESS STATE

    獲取該log:讀取文件/proc/binder/proc/*

    bind相關的一些狀態

    FILESYSTEMS

    獲取該log:執行/system/bin/df

    主要文件的一些容量使用狀態(cache,sqlite,dev...)

    PACKAGE SETTINGS

    獲取該log:讀取文件/data/system/packages.xml

    系統中package的一些狀態(訪問權限,路徑...),類似Windows里面的一些lnk文件吧.

    PACKAGE UID ERRORS

    獲取該log:讀取文件/data/system/uiderrors.txt

    錯誤信息

    KERNEL LAST KMSG LOG

    最新kernel message log

    LAST RADIO LOG

    最新radio log

    KERNEL PANIC CONSOLE LOG

    KERNEL PANIC THREADS LOG

    控制臺/線程的一些錯誤信息log

    BACKLIGHTS

    獲取該log:獲取LCD brightness讀/sys/class/leds/lcd-backlight/brightness

    獲取該log:獲取Button brightness讀/sys/class/leds/button-backlight/brightness

    獲取該log:獲取Keyboard brightness讀/sys/class/leds/keyboard-backlight/brightness

    獲取該log:獲取ALS mode讀/sys/class/leds/lcd-backlight/als

    獲取該log:獲取LCD driver registers讀/sys/class/leds/lcd-backlight/registers

    獲取相關亮度的一些信息

    (2)build.prop

    VERSION INFO輸出下列信息
    當前時間
    當前內核版本:可以讀取文件(/proc/version)獲得
    顯示當前命令:可以讀取文件夾(/proc/cmdline)獲得
    顯示系統build的一些屬性:可以讀取文件(/system/build.prop)獲得
    輸出系統一些屬性
    gsm.version.ril-impl
    gsm.version.baseband
    gsm.imei
    gsm.sim.operator.numeric
    gsm.operator.alpha

    (3)dumpsys

    執行/system/bin/dumpsys后可以獲得這個log.
    經常會發現該log輸出不完整,因為代碼里面要求該工具最多只執行60ms,可能會導致log無法完全輸出來.
    可以通過修改時間參數來保證log完全輸出.
    信息:
    Currently running services
    DUMP OF SERVICE services-name(running)

    Log Code Analysis

    Site: ."frameworks"base"cmds"dumpstate"

    相關Log程序的代碼可以從上面目錄獲取

    Log Analysis Experience

    分析步驟

    1.查看一些版本信息
    確認問題的系統環境
    2.查看CPU/MEMORY的使用狀況
    看是否有內存耗盡,CPU繁忙這樣的背景情況出現.
    3.分析traces
    因為traces是系統出錯以后輸出的一些線程堆棧信息,可以很快定位到問題出在哪里. 
    4.分析SYSTEM LOG
    系統Log詳細輸出各種log,可以找出相關log進行逐一分析

    實例分析

    下面分析我寫的一個測試例子,在OnCreate做一個死循環,這樣主線程會被鎖住,在按下硬件的Back之后會出現ANR的錯誤.
    在traces中發現該程序的堆棧信息如下:

    ----- pid 20597 at 2010-03-15 01:29:53 -----
    Cmd line: com.android.test
    DALVIK THREADS:
    "main" prio=5 tid=3 TIMED_WAIT
    | group="main" sCount=1 dsCount=0 s=N obj=0x2aac6240 self=0xbda8
    | sysTid=20597 nice=0 sched=0/0 cgrp=default handle=1877232296
    at java.lang.VMThread.sleep(Native Method)
    at java.lang.Thread.sleep(Thread.java:1306)
    at java.lang.Thread.sleep(Thread.java:1286)
    at android.os.SystemClock.sleep(SystemClock.java:114)
    at com.android.test.main.onCreate(main.java:20)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
    at android.app.ActivityThread.access$2200(ActivityThread.java:119)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4363)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    at dalvik.system.NativeStart.main(Native Method)
    "Binder Thread #2" prio=5 tid=11 NATIVE
    | group="main" sCount=1 dsCount=0 s=N obj=0x2fb7c260 self=0x143860
    | sysTid=20601 nice=0 sched=0/0 cgrp=default handle=1211376
    at dalvik.system.NativeStart.run(Native Method)
    "Binder Thread #1" prio=5 tid=9 NATIVE
    | group="main" sCount=1 dsCount=0 s=N obj=0x2fb7c1a0 self=0x14c980
    | sysTid=20600 nice=0 sched=0/0 cgrp=default handle=1207920
    at dalvik.system.NativeStart.run(Native Method)
    "Signal Catcher" daemon prio=5 tid=7 RUNNABLE
    | group="system" sCount=0 dsCount=0 s=N obj=0x2fb7a1e8 self=0x126cc0
    | sysTid=20599 nice=0 sched=0/0 cgrp=default handle=1269048
    at dalvik.system.NativeStart.run(Native Method)
    "HeapWorker" daemon prio=5 tid=5 VMWAIT
    | group="system" sCount=1 dsCount=0 s=N obj=0x2e31daf0 self=0x135c08
    | sysTid=20598 nice=0 sched=0/0 cgrp=default handle=1268528
    at dalvik.system.NativeStart.run(Native Method)
    ----- end 20597 -----

    該文件的堆棧結構從下往上進行分析
    (1)棧底at dalvik.system.NativeStart.run(Native Method)
    系統為當前的task(應用程式)啟動一個專用的虛擬機 
    (2) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
    Activity Services是在后臺負責管理Activity,它此時將測試例子的Activity啟動起來了
    (3)at com.android.test.main.onCreate(main.java:20)
    啟動測試程序
    (4)棧頂at java.lang.VMThread.sleep(Native Method)
    線程被sleep掉了,所以無法響應用戶,出現ANR錯誤.

    上面是對一個非常簡單的問題的分析.

    如果遇到比較復雜的問題還需要詳細分析SYSTEM LOG.
    1.比如網絡異常,要通過SYSTEM LOG里面輸出的網絡鏈接信息來判斷網絡狀態
    2.數據傳輸,網絡鏈接等耗時的操作需要分析SYSTEM LOG里面ActivityManager的響應時間

    posted on 2011-01-17 11:41 九寶 閱讀(804) 評論(0)  編輯  收藏 所屬分類: android

    主站蜘蛛池模板: 一级毛片免费在线播放| 亚洲精品国产第一综合99久久| xxxxwww免费| 亚洲av最新在线网址| 亚洲一区二区三区免费观看| 中文字幕免费视频一| 91亚洲精品视频| 黄色永久免费网站| 亚洲第一成人在线| 女人张开腿等男人桶免费视频 | 最近免费视频中文字幕大全| 久久精品蜜芽亚洲国产AV | 国产精品久久久久久久久久免费| 亚洲国产成人va在线观看网址| 免费黄色网址网站| 亚洲熟女精品中文字幕| 在线永久免费观看黄网站| 亚洲av无码国产精品色午夜字幕 | 亚洲国产另类久久久精品| 大地资源中文在线观看免费版 | 亚洲高清专区日韩精品| 99精品在线免费观看| 亚洲免费在线观看视频| 成人永久免费福利视频网站| 午夜成人无码福利免费视频| 亚洲AV中文无码乱人伦下载| 国产高清免费视频| 性色av极品无码专区亚洲 | 永久免费av无码不卡在线观看| 亚洲国产精品SSS在线观看AV| 59pao成国产成视频永久免费| 亚洲视频在线观看2018| 亚洲国产精品日韩| 在线观看的免费网站无遮挡| 亚洲AV永久无码精品一福利| 久久久久亚洲精品无码网址 | 亚洲免费视频在线观看| 亚洲乱码无人区卡1卡2卡3| 在线永久看片免费的视频| 日韩欧美亚洲国产精品字幕久久久 | 日本中文字幕免费高清视频|