參考鏈接
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í)行方法,然后進入下一步,不會進入方法內(nèi)容 |
F8 |
| step into |
單步跳入 |
單步向下執(zhí)行,如果當(dāng)前是自定義方法,hi進入方法內(nèi)部,系統(tǒng)方法則不進入方法內(nèi)部 |
F7 |
| Force step into |
強制單步跳入 |
與單步跳入不同的是,不管什么方法他都會進入 |
Alt + Shfit + F7 |
| step out |
單步跳出 |
與單步跳入相對,表示從方法體中跳出,回到進入方法的位置,以繼續(xù)斷點 |
shfit + F8 |
| run to cursor |
執(zhí)行到光標(biāo)處 |
直接從當(dāng)前位置運行到光標(biāo)處,但是能被中間的斷點攔截。 |
alt + F9 |
| Evalyate Exoression |
計算表達式 |
支持在點點過程中,通過直接賦值或者表達式方式,修改任意表倆個的值。 |
alt+F8 |
上圖從左往右看,名稱和作用如下表所示。
| 名稱 |
作用 |
備注 |
快捷鍵 |
| show Execution Point |
定位到當(dāng)前正在調(diào)試的位置 |
無備注 |
alt+F10 |
| step over |
單步跳過 |
一步一步執(zhí)行,遇到方法會直接執(zhí)行方法,然后進入下一步,不會進入方法內(nèi)容 |
F8 |
| step into |
單步跳入 |
單步向下執(zhí)行,如果當(dāng)前是自定義方法,hi進入方法內(nèi)部,系統(tǒng)方法則不進入方法內(nèi)部 |
F7 |
| Force step into |
強制單步跳入 |
與單步跳入不同的是,不管什么方法他都會進入 |
Alt + Shfit + F7 |
| step out |
單步跳出 |
與單步跳入相對,表示從方法體中跳出,回到進入方法的位置,以繼續(xù)斷點 |
shfit + F8 |
| run to cursor |
執(zhí)行到光標(biāo)處 |
直接從當(dāng)前位置運行到光標(biāo)處,但是能被中間的斷點攔截。 |
alt + F9 |
| Evalyate Exoression |
計算表達式 |
支持在點點過程中,通過直接賦值或者表達式方式,修改任意表倆個的值。 |
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)截屏,查看線程和堆信息,日志信息,進程,廣播狀態(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)的所有進程,但只會殺死安全進程 |
可以通過--user <USER_ID>指定用戶 |
am kill com.reoger.app |
am kill -all |
殺死全部的后臺進程 |
無 |
am kill -all |
am 就是activity manager的簡稱,可以用于啟動activity、打開或關(guā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)的所有進程,但只會殺死安全進程 |
可以通過--user <USER_ID>指定用戶 |
am kill com.reoger.app |
am kill -all |
殺死全部的后臺進程 |
無 |
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的詳細信息 |
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] |
進程狀態(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。