欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android筆記之:App調(diào)試的幾個(gè)命令的實(shí)踐與分析

 更新時(shí)間:2013年04月28日 11:01:43   作者:  
本篇文章介紹了,在Android中:App調(diào)試的幾個(gè)命令的實(shí)踐與分析。需要的朋友參考下

在Android的應(yīng)用開(kāi)發(fā)中,我們會(huì)用到各種代碼調(diào)試;其實(shí)在Android的開(kāi)發(fā)之后,我們可能會(huì)碰到一些隨機(jī)的問(wèn)題,如cpu過(guò)高,內(nèi)存泄露等,我們無(wú)法簡(jiǎn)單的進(jìn)行代碼調(diào)試,我們需要一個(gè)系統(tǒng)日志等等,下面我把握工作中碰到的幾個(gè)常用命令和方法給大家演示實(shí)踐一下。

1.logcat命令
這個(gè)命令最簡(jiǎn)單常用,可查看幫助,我不多說(shuō),如果需要打印時(shí)間,加參數(shù)-v time

adb logcat -v time

2.bugreport命令
這個(gè)命令也非常簡(jiǎn)單,但是在實(shí)際應(yīng)用中非常有用,會(huì)有從開(kāi)機(jī)之后詳細(xì)的dumpsys,dumpstate和logcat信息,是一份完整的日志記錄。對(duì)分析用戶(hù)行為,異常信息,系統(tǒng)狀態(tài)有很大的參考作用。一般我們會(huì)把bugreport導(dǎo)出到電腦上分析。

adb bugreport > xxx.log

我再次強(qiáng)調(diào),bugreport里面包含豐富的系統(tǒng)和用戶(hù)信息,它是其他很多命令輸出的結(jié)果的記錄,非常有用。

3.dumpsys命令
這個(gè)查看系統(tǒng)信息,用的還是比較多的.

復(fù)制代碼 代碼如下:

dumpsys [options]
               meminfo 顯示內(nèi)存信息
               cpuinfo 顯示CPU信息
               account 顯示accounts信息
               activity 顯示所有的activities的信息
               window 顯示鍵盤(pán),窗口和它們的關(guān)系
               wifi 顯示wifi信息

例如查看某個(gè)程序內(nèi)存信息:
復(fù)制代碼 代碼如下:

#查看應(yīng)用com.tianxia.test的內(nèi)存使用情況
adb shell dumpsys meminfo com.tianxia.test

效果圖如下:

里面的信息很有價(jià)值,尤其對(duì)于分析內(nèi)存泄露,內(nèi)存溢出都有極大的作用。

4.top命令
這個(gè)查看cpu信息太方便了。

top -m 5 -t

我們看看效果圖,其中按cpu大小列出5個(gè)進(jìn)程列表。

com.tianxia.test的cpu過(guò)高,會(huì)導(dǎo)致手機(jī)發(fā)燙。同時(shí)利用這個(gè)信息,可以監(jiān)控應(yīng)用cpu的使用,以調(diào)整優(yōu)化代碼。

5.配置文件local.prop
目前網(wǎng)上沒(méi)有查到local.prop的配置使用,工作中本人只使用過(guò)如下:

log.tag.SQLiteStatements=VERBOSE log.tag.SQLiteTime=VERBOSE

把上述文本加到/data/local.prop中,如果沒(méi)有這個(gè)文件自行創(chuàng)建。然后重啟手機(jī),就能看到每個(gè)應(yīng)用詳細(xì)的查詢(xún)數(shù)據(jù)庫(kù)的sql語(yǔ)句信息,對(duì)于調(diào)試數(shù)據(jù)庫(kù),分析和優(yōu)化數(shù)據(jù)庫(kù)sql異常非常有用。

6.分析手機(jī)發(fā)燙
下面我們來(lái)實(shí)踐一個(gè)例子,手機(jī)發(fā)燙太厲害,怎么找出問(wèn)題?
首先我們寫(xiě)一個(gè)程序com.tianxia.test,死循環(huán),核心代碼如下:

復(fù)制代碼 代碼如下:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    while(true) {
        System.currentTimeMillis();
    }
}

這個(gè)應(yīng)用打開(kāi)后會(huì)一直獲取系統(tǒng)時(shí)間,因?yàn)樵谥骶€程,肯定導(dǎo)致應(yīng)用ANR,也會(huì)一直浪費(fèi)系統(tǒng)cpu,手機(jī)發(fā)熱,我們運(yùn)行它。
假設(shè)我們不知道上述代碼,我們來(lái)找到這個(gè)問(wèn)題:
(1).找到發(fā)燙的應(yīng)用。
使用top命令:

top -m 5 -t

一看是com.tianxia.test占用85%的cpu,原來(lái)是這家伙在搗鬼。進(jìn)程ID是644,這個(gè)后面我們有用。
(2).分析發(fā)燙的應(yīng)用進(jìn)程在干嘛
需要用到linux下的strace命令,但是android是沒(méi)有集成這個(gè)命令的,android版本的下載地址:
http://benno.id.au/android/strace
下載完成后,上傳到手機(jī)中:
我們adb push strace /system/bin,在模擬器上是上傳到/system/bin會(huì)報(bào)out of memory錯(cuò)誤,我們也可以上傳到/data目錄下,如果沒(méi)有執(zhí)行權(quán)限,還需要chmod 777 strace.
strace命令有很多參數(shù),直接執(zhí)行strace會(huì)顯示使用說(shuō)明:


其中-p參數(shù)輸入的就是進(jìn)程號(hào),第一步中我們找到com.tianxia.test的進(jìn)程ID是644,我們看看這個(gè)應(yīng)用占用這么高的cpu在干嘛?

strace -p 644

輸出如下:


它的系統(tǒng)調(diào)用一直是gettimeofday,一直輸出這個(gè),顯然哪里一定進(jìn)入死循環(huán)了,而且是獲取時(shí)間的死循環(huán),然后結(jié)合logcat和代碼,定位這段代碼(就是前面我們給出的那段代碼了)解決這個(gè)bug。

7.采集手機(jī)的cpu運(yùn)行情況.
有時(shí)使用日志我們很難針對(duì)性的獲取我們想要的信息,我們可能需要寫(xiě)一些最簡(jiǎn)單的腳步放在手機(jī)里面執(zhí)行。
如監(jiān)控cpu占用的記錄cpu_log.sh:

復(fù)制代碼 代碼如下:

# !/system/bin/sh
#這個(gè)腳步比較粗糙,是這么個(gè)意思
file=/sdcard/cpu/cpu_info.log
rm $file
until [ 1 -gt 10000 ]
do
echo -e "\n\n\n\n\n---------------">>$file
date >> $file
top -m 5 -n 1 >> $file
sleep 3
done

每隔3s中就會(huì)把手機(jī)的cpu的信息寫(xiě)到sdcard的cpu目錄下的cpu_info.log文件中,方便我們后續(xù)分析。
 ps:使用方法是 push到data目錄下,賦予可執(zhí)行權(quán)限,在shell下執(zhí)行即可。

8.采集某個(gè)應(yīng)用的內(nèi)存數(shù)據(jù)
這個(gè)實(shí)踐和上面的腳本類(lèi)似,只是命令不一樣我另外單獨(dú)列出來(lái),因?yàn)檫@個(gè)有時(shí)候很有用。
比如,我們要采集com.tianxia.test的內(nèi)存使用情況,分析它是不是會(huì)內(nèi)存泄露,腳步類(lèi)似:

復(fù)制代碼 代碼如下:

# !/system/bin/sh
#這個(gè)腳步比較粗糙,是這么個(gè)意思
file=/sdcard/cpu/mem_info.log
rm $file
until [ 1 -gt 10000 ]
do
echo -e "\n\n\n\n\n---------------">>$file
date >> $file
dumpsys meminfo com.tianxia.test >> $file
sleep 3
done

使用方法也是一樣。

相關(guān)文章

  • Android編程實(shí)現(xiàn)手機(jī)自帶內(nèi)部存儲(chǔ)路徑的獲取方法

    Android編程實(shí)現(xiàn)手機(jī)自帶內(nèi)部存儲(chǔ)路徑的獲取方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)手機(jī)自帶內(nèi)部存儲(chǔ)路徑的獲取方法,涉及Android針對(duì)掛載點(diǎn)信息的獲取技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • 詳解Android首選項(xiàng)框架的使用實(shí)例

    詳解Android首選項(xiàng)框架的使用實(shí)例

    首選項(xiàng)這個(gè)名詞對(duì)于熟悉Android的朋友們一定不會(huì)感到陌生,它經(jīng)常用來(lái)設(shè)置軟件的運(yùn)行參數(shù)。本篇文章主要介紹詳解Android首選項(xiàng)框架的使用實(shí)例,有興趣的可以了解一下。
    2016-11-11
  • OkHttp原理分析小結(jié)

    OkHttp原理分析小結(jié)

    OkHttp 是 Square 公司開(kāi)源的一款網(wǎng)絡(luò)框架,封裝了一個(gè)高性能的 http 請(qǐng)求庫(kù),本文對(duì)OkHttp原理給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • android實(shí)現(xiàn)滾動(dòng)文本效果

    android實(shí)現(xiàn)滾動(dòng)文本效果

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)滾動(dòng)文本效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Android編程實(shí)現(xiàn)wifi掃描及連接的方法

    Android編程實(shí)現(xiàn)wifi掃描及連接的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)wifi掃描及連接的方法,涉及Android網(wǎng)絡(luò)操作掃描、查找、連接、線程等相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • Android中使用TextView實(shí)現(xiàn)文字跑馬燈效果

    Android中使用TextView實(shí)現(xiàn)文字跑馬燈效果

    本文主要介紹了Android中使用TextView實(shí)現(xiàn)文字走馬燈效果的方法解析。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • Android  view自定義實(shí)現(xiàn)動(dòng)態(tài)進(jìn)度條

    Android view自定義實(shí)現(xiàn)動(dòng)態(tài)進(jìn)度條

    這篇文章主要介紹了Android view自定義實(shí)現(xiàn)動(dòng)態(tài)進(jìn)度條的相關(guān)資料,這里提供實(shí)例代碼及實(shí)現(xiàn)效果圖,需要的朋友可以參考下
    2016-12-12
  • 詳解Android中一些SQLite的增刪改查操作

    詳解Android中一些SQLite的增刪改查操作

    這篇文章主要為大家詳細(xì)介紹了Android中一些SQLLite的增刪改查操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Android Studio配合WampServer完成本地Web服務(wù)器訪問(wèn)的問(wèn)題

    Android Studio配合WampServer完成本地Web服務(wù)器訪問(wèn)的問(wèn)題

    這篇文章主要介紹了Android Studio配合WampServer完成本地Web服務(wù)器訪問(wèn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Android SharedPreference存儲(chǔ)文件三步走

    Android SharedPreference存儲(chǔ)文件三步走

    SharedPreferences是安卓平臺(tái)上一個(gè)輕量級(jí)的存儲(chǔ)類(lèi),用來(lái)保存應(yīng)用的一些常用配置,比如Activity狀態(tài),Activity暫停時(shí),將此activity的狀態(tài)保存到SharedPereferences中;當(dāng)Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時(shí),再?gòu)腟haredPreferences中將值取出
    2023-01-01

最新評(píng)論