Android下的一些調試手段(含kernel調試辦法)

來源:互聯網
上載者:User

標籤:

主要介紹除了常規的kernel的printk和android的DDMS, logcat外的幾個調試手段.

包括bugreport, oprofile, traceview, ftrace等.

 

Bugreport

Bugreport是android平台內建的工具, 收集了device端的詳細的狀況, 可以在console下直接運行“bugreport > /sdcard/bugreport.log”或者接入USB cable並開啟adb debug的狀況下運行”adb bugreport > bugreport.log”.
下面是一個抓取的bugreport的參考資料.

相關代碼路徑
frameworksasecmdsugreport
frameworksasecmdsdumpstate
frameworksasecmdsdumpsys

 

oprofile

Oprofie的原理比較簡單: 很多CPU都提供一個所謂效能計數器的東西(performance counter),
大致的原理就是程式可以註冊告訴CPU對什麼event感興趣(比如CPU_CYCLE, CPU經曆了一次刻度),
然後CPU在執行了相應的操作後, 就會在效能計數器上加1, 這樣程式就可以取出.
所以, 使用OProfile來定位CPU使用率的問題, 就變成了讓oprofile收集程式運行過程中哪個可執行程式(或是so)中的哪個function, 消耗的CPU CYCLE最多.

在實際應用中, oprofile可以用來對找出系統的瓶頸並進行最佳化.
R70中預設的工程中, Oprofile是沒有被編譯進來的, 需要修改externaloprofileopcontrolandroid.mk和externaloprofiledaemonandroid.mk
兩個檔案中的LOCAL_MODULE_TAGS 屬性從debug修改為eng或者user, 從而將oprofile編譯進android中.

此外, Oprofile需要kernel中開啟相應的compile option來支援, kernel對應代碼在kernel race目錄中. 相應的config如下:

General setup [*] Profiling Support
CONFIG_PROFILING

General setup <*> OProfile system profiling
CONFIG_OPROFILE
CONFIG_RING_BUFFER
CONFIG_RING_BUFFER_ALLOW_SWAP
CONFIG_RING_BUFFER_BENCHMARK is not set

General setup Kernel Performance Events And Counters
[*] Kernel performance events and counters
CONFIG_PERF_EVENTS
CONFIG_HW_PERF_EVENTS

Examples:


最後, 在PC端安裝oprofile以便對device端產生的結果進行解析.

如果需要得到最後的圖形結果, 還需要安裝Graphviz.

 

所有的準備工作就緒後,只要在device端運行如下的命令,即可啟動oprofile對device進行檢測.

opcontrol–quick ===> setup相應的環境和參數

opcontrol–start ===> 啟動oprofile

opcontrol–status ===> 中途可以查看oprofile的狀態

opcontrol–stop ===> 停止oprofile

opcontrol–dump ===> 將結果儲存至/data/oprofile 路徑

 

最後, 在PC端運行android工程中的externaloprofile下的opimport_pull指令碼, 即可產生相應的結果callgraph.txt, load.txt, load2.txt以及callgraph.png(如下).

 

注意, 在運行指令碼前需要設定一些環境變數和device端kernel對應的vmlinux檔案.

exportOPROFILE_EVENTS_DIR= {Your Android Source DIR}/prebuilt/linux-x86_64/oprofile/

exportOPROFILE_BIN_DIR=/{Oprofile Bin DIR on Your PC }/

exportOUT= {Your Android Source DIR}/out/target/product/smdkv210

cd {Your Android Source DIR}/out/target/product/smdkv210/symbols

ln -s {Your Kernel Source DIR}/vmlinux ./vmlinux

 

traceview

Traceview是android內建的tool,用來分析在android端通過調用Debug.startMethodTracing(xxxx);產生的名為xxxx.trace的檔案. 這個方法需要在android的代碼中添加Debug.startMethodTracing(xxxx)和Debug.stopMethodTracing()的代碼. 使用者通過在合理地點添加這兩個函數, 可以很直觀的分析在這個中間過程中, 系統的健全狀態, 上到每個進程在什麼時候開始跑了多長時間, 下到每個函數跑了多少次, 每次跑了多長時間.

 

Ftrace

 

ftrace是內建於Linux核心的跟蹤工具, 從2.6.27開始加入主流核心. ftrace的作用是協助開發人員瞭解 Linux 核心的運行時行為, 以便進行故障調試或效能分析.

使用ftrace可以對核心功能調用、環境切換進行跟蹤, 還可以查看中斷被關閉的時間長度, 跟蹤核心態中的延遲以及效能問題等.

使用ftrace對核心進行跟蹤調試, 可以找到核心中出現的問題的根源, 通過ftrace來觀察核心中發生的活動, 則可以瞭解核心的工作機制.

Ftrace可以在device的UI沒有反應, 但是console還是active的狀況下對kernel進行分析.

Ftrace的功能需要在kernel中開啟相應的config. 此外, 開啟ftrace會給系統帶來額外的overhead, 因此應該在release的版本中儘可能關閉ftrace的功能.

圖 1.Kernel hackin

圖 1. Kernel hacking


圖 2. Tracers


圖 3. 核心支援的跟蹤器列表

R70的kernel中,Ftrace支援的tracer有 wakeup, preemptirqsoff, preemptoff, irqsoff, function, sched_switch共6種.

具體的使用方法可以參考Reference中的串連以及kernel中的documents race下的ftrace.txt

得到的一些結果如下:

 http://www.2cto.com/kf/201501/366871.html

Android下的一些調試手段(含kernel調試辦法)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.