參考鏈接
debug 技巧
關(guān)于android studio的debug技巧雹仿,前面的兩篇參考文章已經(jīng)寫的特別好了墓懂,也沒必要再寫一次了仆邓,主要就記錄一下debug的關(guān)鍵概念和快捷鍵红选。至于如何debug肴捉,就請參考前面兩篇文章。
工具欄介紹
名稱 |
作用 |
備注 |
快捷鍵 |
show Execution Point |
定位到當(dāng)前正在調(diào)試的位置 |
無備注 |
alt+F10 |
step over |
單步跳過 |
一步一步執(zhí)行搬瑰,遇到方法會直接執(zhí)行方法臣咖,然后進(jìn)入下一步,不會進(jìn)入方法內(nèi)容 |
F8 |
step into |
單步跳入 |
單步向下執(zhí)行谱醇,如果當(dāng)前是自定義方法暇仲,hi進(jìn)入方法內(nèi)部,系統(tǒng)方法則不進(jìn)入方法內(nèi)部 |
F7 |
Force step into |
強制單步跳入 |
與單步跳入不同的是副渴,不管什么方法他都會進(jìn)入 |
Alt + Shfit + F7 |
step out |
單步跳出 |
與單步跳入相對奈附,表示從方法體中跳出,回到進(jìn)入方法的位置煮剧,以繼續(xù)斷點 |
shfit + F8 |
run to cursor |
執(zhí)行到光標(biāo)處 |
直接從當(dāng)前位置運行到光標(biāo)處斥滤,但是能被中間的斷點攔截。 |
alt + F9 |
Evalyate Exoression |
計算表達(dá)式 |
支持在點點過程中勉盅,通過直接賦值或者表達(dá)式方式佑颇,修改任意表倆個的值。 |
alt+F8 |
上圖從左往右看草娜,名稱和作用如下表所示挑胸。
名稱 |
作用 |
備注 |
快捷鍵 |
show Execution Point |
定位到當(dāng)前正在調(diào)試的位置 |
無備注 |
alt+F10 |
step over |
單步跳過 |
一步一步執(zhí)行,遇到方法會直接執(zhí)行方法宰闰,然后進(jìn)入下一步茬贵,不會進(jìn)入方法內(nèi)容 |
F8 |
step into |
單步跳入 |
單步向下執(zhí)行,如果當(dāng)前是自定義方法议蟆,hi進(jìn)入方法內(nèi)部闷沥,系統(tǒng)方法則不進(jìn)入方法內(nèi)部 |
F7 |
Force step into |
強制單步跳入 |
與單步跳入不同的是,不管什么方法他都會進(jìn)入 |
Alt + Shfit + F7 |
step out |
單步跳出 |
與單步跳入相對咐容,表示從方法體中跳出舆逃,回到進(jìn)入方法的位置,以繼續(xù)斷點 |
shfit + F8 |
run to cursor |
執(zhí)行到光標(biāo)處 |
直接從當(dāng)前位置運行到光標(biāo)處,但是能被中間的斷點攔截路狮。 |
alt + F9 |
Evalyate Exoression |
計算表達(dá)式 |
支持在點點過程中虫啥,通過直接賦值或者表達(dá)式方式,修改任意表倆個的值奄妨。 |
alt+F8 |
快捷鍵 |
功能 |
說明 |
右擊斷點 |
為斷點設(shè)置執(zhí)行條件涂籽,或打印信息 |
只能針對本斷點生效 |
alt + 單擊 |
查看斷點時變量的值 |
無 |
ctrl+alt+F8 |
為斷點添加執(zhí)行條件,或打印信息 |
這個可以對所有的斷點生效 |
再加來幾個快捷鍵砸抛。
快捷鍵 |
功能 |
說明 |
右擊斷點 |
為斷點設(shè)置執(zhí)行條件评雌,或打印信息 |
只能針對本斷點生效 |
alt + 單擊 |
查看斷點時變量的值 |
無 |
ctrl+alt+F8 |
為斷點添加執(zhí)行條件,或打印信息 |
這個可以對所有的斷點生效 |
工具篇
uiautorviewer
可以通過這個工具快速定位到UI控件的ID直焙,并通過ID快速找到相應(yīng)的邏輯景东。
DDMS
可以利用ddms這個工具,實現(xiàn)截屏奔誓,查看線程和堆信息斤吐,日志信息,進(jìn)程厨喂,廣播狀態(tài)信息和措,模擬來電,呼叫和短信等功能蜕煌。
具體使用方法參考這里https://developer.android.com/studio/profile/monitor.html
命令篇
adb shell am
命令 |
作用 |
備注 |
示例 |
am start -n <package name>/<ativity name> |
啟動acivity |
-n 表示以組件式啟動派阱,還可以 |
am start -a android.settings.INPUT_METHOD_SETTINGS //使用Action方式打開系統(tǒng)設(shè)置-輸入法設(shè)置 |
am start -a -n --es extra "hello" --ei pid 10 <package name>/<ativity name> |
待參數(shù)的啟動activity |
--es 表示帶string,--ei 表示整型數(shù)據(jù),都是以鍵值對的形式 |
am start -a -n --es extra "hello" --ei pid 10 com.reoger.app/com.example.cm.myapplication.NextActivity |
am broadcast -a <action> |
啟動廣播 |
還可以通過--user 指定用戶發(fā)送廣播 |
com.android.broadcast.test |
am broadcast -a <action> --es <key> <value> |
帶信息的發(fā)送廣播 |
--es表示字符串幌绍,還有--ez(布爾值)等多種類型數(shù)據(jù)颁褂,都是以鍵值對的形式 |
am broadcast -a com.android.broadcast.test --es adb_extra "hello" |
am startservice <package name>/<service name> |
啟動服務(wù) |
可以通過--user<USER_ID> 指定啟動的用戶 |
am startservice com.reoger.app/com.example.cm.myapplication.MyService |
am force-stop <package name> |
關(guān)閉指定包名的應(yīng)用程序 |
無 |
am force-stop com.reoger.app |
am kill <package name> |
殺死與應(yīng)該程序包想關(guān)聯(lián)的所有進(jìn)程,但只會殺死安全進(jìn)程 |
可以通過--user <USER_ID> 指定用戶 |
am kill com.reoger.app |
am kill -all |
殺死全部的后臺進(jìn)程 |
無 |
am kill -all |
am 就是activity manager的簡稱傀广,可以用于啟動activity颁独、打開或關(guān)閉進(jìn)程、發(fā)送廣播等操作伪冰。
關(guān)于具體的命令誓酒,可以參考這里http://blog.csdn.net/soslinken/article/details/50245865.
然后,這里就記錄常用的adb shell am
命令贮聂。
[注:這里默認(rèn)省略了adb shell
]
命令 |
作用 |
備注 |
示例 |
am start -n <package name>/<ativity name> |
啟動acivity |
-n 表示以組件式啟動靠柑,還可以 |
am start -a android.settings.INPUT_METHOD_SETTINGS //使用Action方式打開系統(tǒng)設(shè)置-輸入法設(shè)置 |
am start -a -n --es extra "hello" --ei pid 10 <package name>/<ativity name> |
待參數(shù)的啟動activity |
--es 表示帶string,--ei 表示整型數(shù)據(jù),都是以鍵值對的形式 |
am start -a -n --es extra "hello" --ei pid 10 com.reoger.app/com.example.cm.myapplication.NextActivity |
am broadcast -a <action> |
啟動廣播 |
還可以通過--user 指定用戶發(fā)送廣播 |
com.android.broadcast.test |
am broadcast -a <action> --es <key> <value> |
帶信息的發(fā)送廣播 |
--es表示字符串吓懈,還有--ez(布爾值)等多種類型數(shù)據(jù)歼冰,都是以鍵值對的形式 |
am broadcast -a com.android.broadcast.test --es adb_extra "hello" |
am startservice <package name>/<service name> |
啟動服務(wù) |
可以通過--user<USER_ID> 指定啟動的用戶 |
am startservice com.reoger.app/com.example.cm.myapplication.MyService |
am force-stop <package name> |
關(guān)閉指定包名的應(yīng)用程序 |
無 |
am force-stop com.reoger.app |
am kill <package name> |
殺死與應(yīng)該程序包想關(guān)聯(lián)的所有進(jìn)程,但只會殺死安全進(jìn)程 |
可以通過--user <USER_ID> 指定用戶 |
am kill com.reoger.app |
am kill -all |
殺死全部的后臺進(jìn)程 |
無 |
am kill -all |
詳情參考這里:http://blog.csdn.net/soslinken/article/details/50245865
adb shell pm
pm即是 package manager的簡稱耻警,可以用于安裝應(yīng)用隔嫡、查詢應(yīng)用信息甸怕、系統(tǒng)權(quán)限、控制應(yīng)用腮恩。
命令 |
作用 |
備注 |
示例 |
pm list packages [options] [fileter] |
打印所有已經(jīng)安裝的應(yīng)用的包名 |
options 常用的有-3 表示只顯示第三方應(yīng)用的包名梢杭,filter表示按名字篩選 |
pm list packages -e 顯示可用的應(yīng)用和包名 |
pm list permission [options] [group] |
打印權(quán)限 |
-g 表示按組列出,-s 表示簡短打印 |
pm list permission-groups 打印所有已知的權(quán)限組 |
grant <package_name> <permission> |
授予應(yīng)用權(quán)限 |
必須android 6.0及以上的設(shè)備 |
grant com.reoger.app android.permission.WRITE_EXTERNAL_STORAGE |
revoke <package_name> <permission> |
撤銷應(yīng)用權(quán)限 |
必須android 6.0及以上的設(shè)備 |
revoke com.reoger.app android.permission.WRITE_EXTERNAL_STORAGE |
pm clear <package name> |
清除應(yīng)用數(shù)據(jù) |
無 |
pm clear com.reoger.app |
pm enable <package or component> |
使得packaege或componet可用 |
只針對第系統(tǒng)應(yīng)用 |
pm enable com.reoger.app |
pm hide <package or component> |
隱藏package或componet |
被隱藏應(yīng)用在管理中變得不可見秸滴,桌面圖標(biāo)也會消失 |
pm hide com.reoger.app |
pm unhide <package or component> |
取消隱藏package或componet |
桌面圖標(biāo)需要重新添加 |
pm unhide com.reoger.app |
詳情請參考這里:https://www.cnblogs.com/JianXu/p/5380882.html
adb shell dumysys
命令 |
作用 |
dumpsys cpuinfo |
查看CPU信息 |
dumpsys activity |
查看一大堆信息武契,包括activity、broadcasts荡含、providers咒唆、permissions等等信息 |
dumpsys activity top |
獲取當(dāng)前android系統(tǒng)中與用戶交互的activity的詳細(xì)信息 |
dumpsys activity activities |
顯示當(dāng)前所有運行的任務(wù)棧,可以與管道- grep XXX 結(jié)合使用,用于篩選我們需要的任務(wù)棧 |
dumpsys activity meminfo <package name> |
顯示應(yīng)用內(nèi)存使用的情況 |
dumpsys activity package <package name> |
顯示apk的信息 |
option |
含義 |
-a |
包括所有可用server狀態(tài) |
-c |
包括client狀態(tài)内颗,即app端情況 |
-p package |
限定輸出指定包名 |
其中的dumpsys activity [options] [WHAT]
參數(shù)可選如下:
option |
含義 |
-a |
包括所有可用server狀態(tài) |
-c |
包括client狀態(tài)钧排,即app端情況 |
-p package |
限定輸出指定包名 |
WHAT |
解釋 |
對應(yīng)源碼 |
a[ctivities] |
activity狀態(tài) |
dumpActivitiesLocked() |
b[roadcasts] [PACKAGE_NAME] |
broadcast狀態(tài) |
dumpBroadcastsLocked() |
s[ervices] [COMP_SPEC …] |
service狀態(tài) |
newServiceDumperLocked().dumpLocked |
prov[iders] [COMP_SPEC …] |
content provider狀態(tài) |
dumpProvidersLocked() |
p[rocesses] [PACKAGE_NAME] |
進(jìn)程狀態(tài) |
dumpProcessesLocked() |
o[om] |
內(nèi)存管理 |
dumpOomLocked() |
i[ntents] [PACKAGE_NAME] |
pending intent狀態(tài) |
dumpPendingIntentsLocked() |
r[ecents] |
最近activity |
dumpRecentsLocked() |
perm[issions] |
URI授權(quán)情況 |
dumpPermissionsLocked() |
all |
所有activities信息 |
dumpActivity() |
top |
頂部activity信息 |
dumpActivity() |
package |
package相關(guān)信息 |
dump() |
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者