android adb 調(diào)試技巧

參考鏈接

debug 技巧

關(guān)于android studio的debug技巧,前面的兩篇參考文章已經(jīng)寫的特別好了,也沒必要再寫一次了,主要就記錄一下debug的關(guān)鍵概念和快捷鍵。至于如何debug,就請參考前面兩篇文章。

工具欄介紹

too.png
名稱 作用 備注 快捷鍵
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ù)。

友情鏈接更多精彩內(nèi)容