日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 调试技巧

發布時間:2023/11/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 调试技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.查看當前堆棧

Call tree

new Exception(“print trace”).printStackTrace();

在logcat中打印當前函數調用關

2.MethodTracing

性能分析與優(

函數占用CPU時間,

調用次數,

函數調用關系)

a) 在程序代碼中加入追蹤開關

import android.os.Debug;

android.os.Debug.startMethodTracing(“/data/tmp/test”);//先建/data/tmp目錄

…//被追蹤程序段

android.os.Debug.stopMethodTracing();

b)編譯,運行后,設備端生成/data/tmp/test.trace文件

c)把trace文件復制到PC端

$adb pull /data/tmp/test.trace/

d)使用android自帶工具分析trace文件

$$ANDROID_SRC/out/host/linux-x86/bin/traceview?test.trace

此時可看到各個函數被調用的次數CPU占用率等信息

e)使用android自帶工具分析生成調用關系類圖

$apt-get install graphviz #安裝圖片相關軟件

$ANDROID_SRC/out/host/linux-x86/bin/dmtracedump –g test.png test.trace

此時目錄下生成類圖test.png

注意:trace文件生成與libdvm模塊DEBUG版本相沖突,所以此方法只適用于對非DEBUG版本模擬器的調試,否則在分析trace文件時會報錯

3.HProf

(Heap Profile)

(內存占用,

及泄漏分析)

a) 在代碼中加入dump動作

import android.os.Debug;

import java.io.IOException;

……

try{

android.os.Debug.dumpHprofData(“/data/tmp/input.hprof”);//預先建立/data/tmp

}catch(IOException ioe){

}

b) 把hprof文件復制到PC端

$adb pull /data/tmp/input.hprof ./

c)使用命令hprof-conv把hprof轉成MAT識別的標準的hprof

$$ANDROID_SRC/out/host/linux-x86/bin/hprof-conv input.hprof output.hprof

d) 使用MAT工具看hprof信息

下載MAT工具:http://www.eclipse.org/mat/downloads.php

用工具打開output.hprof

注意:此工具只顯示java層面而不能顯示C層內存占用信息

4.SamplingProfile

(要求android 2.0+)

每隔N毫秒對當前正在

運行的函數取樣,

并輸出到log中

在代碼中加入取樣設定

import dalvik.system.SamplingProfiler

SamplingProfile sp=SamplingProfiler.getInstance();

sp.start(n);//n為設定每秒采樣次數

sp.logSnapshot(sp.snapshot());

sp.shutDown();

(自動啟動一個線程監測,在logcat中打印信息)

5.通過發送系統信號

獲取Call tree與

內存信息

1) 原理dalvik虛擬機對SIGQUIT和SIGUSR1信號進行處理

(dalvik/vm/SignalCatcher.c),分別完成取當前堆棧和取當前內存情況的功能

2)用法

a) $ chmod 777 /data/anr -R # 把anr目錄權限設為可寫

$ rm /data/anr/traces.txt # 刪除之前的trace信息

$ ps # 找到進程號

$ kill -3 進程號 # 發送SIGQUIT信號給該進程,此時生成trace信息

$ cat /data/anr/traces.txt

功能實現:遍歷thread list(dalvik/vm/Thread.c:dvmDumpAllThreadEx()),并打印當前函數調用關系(dalvik/vm/interp/Stack.c:dumpFrames())

b) $ chmod 777 /data/misc –R

$ ps # 找到進程號

$ kill -10 進程號 # 發送SIGQUIT信事信號給該進程,此時生成hprof信息

$ ls /data/misc/*.hprof

此時生成hprf文件,如何查看此文件,見第2部分(HProf)

注意:hprof文件很大,注意用完刪除,以免占滿存儲器
6.logcat

1) android.util.Log利用println的標準java輸出詞句,并加前綴I/V/D….

2) dalvik利用管道加線程方式,先利用dup2把stdout和stderr重定向到管理中(vm/StdioConverter.c:dvmstdioConverterStartup),然后再啟動一個線程從管道另一端讀出內容

(dalvik/vm/StdioConverter.c:stdioconverterThreadStart()),使用LOG公共工具(system/core/liblog/logd_write.c: __android_log_print())輸出到/dev/log/*中

3)logcat通過加不同參數看/dev/log/下的不同輸入信息

#logcat –b main顯示主緩沖區中的信息

#logcat –b radio 顯示無線緩沖區中的信息

#logcat –b events顯示事件緩沖區中的信息

7.jdwp(java debug

wire protocol)及原理

1) 虛擬機(設備端)在啟動時加載了Agent JDWP 從而具備了調試功能。在調試器端(PC端)通過JDWP協議與設備連接,通過發送命令來獲取的狀態和控制Java程序的執行。JDWP 是通過命令(command)和回復(reply)進行通信的。

2) JDK 中調試工具 jdb 就是一個調試器,DDMS也提供調試器與設備相連。

3) dalvik為JDWP提供了兩種連接方式:tcp方式和adb方式,tcp方式可以手工指定端口,adb方式自動設定為8700端口,通常使用DDMS調試就是通過adb方式
8.monkey壓力測試

android自帶的命令行工具。它向系統發送偽隨機的用戶事件流,實現對正在開發的應用程序進行壓力測試。

在設備端打開setting界面

$ adb shell

#monkey –p com.android.settings -v 500

此時可以看到界面不斷被切換

9.查看Android源碼

Eclipse插件

sqlitemanager插件,實時查看寫入db數據的改變

sqllitemanger插件的用法:

Using SQLite in ANDROID

You can see the sqlite database in eclipse by opening File Explorer .Then

/data/data/package_name/databases

But here we cannot see the tables and table data.
For viewing the table details Eclipse has a plugin. You can download the jar from below.

sqlitemanager下載.

注意:如果是寫入至系統臨時目錄db,則需root)

10.SQLiteManager

plugin for eclipse

sqlitemanager插件,實時查看寫入db數據的改變

sqllitemanger插件的用法:

Using SQLite in ANDROID

You can see the sqlite database in eclipse by opening File Explorer .Then

/data/data/package_name/databases

But here we cannot see the tables and table data.
For viewing the table details Eclipse has a plugin. You can download the jar from below.

sqlitemanager下載.

注意:(如果是寫入系統臨時目錄db,則需root)
11.自定義內存日志通過獨立的界面顯示
12.try catch的快捷鍵快捷鍵ctrl + alt + t

轉載于:https://www.cnblogs.com/reboost/p/9540513.html

總結

以上是生活随笔為你收集整理的android 调试技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。