作為一名碼農(nóng),代碼調(diào)試是一項(xiàng)不可或缺的工作褪测,過程中總能發(fā)現(xiàn)一下能提高效率喝滞、有用的小技巧阁将,此文特總結(jié)一些工作用到的一些調(diào)試技巧。
Debug技巧
斷點(diǎn)debug大家都會使用右遭,但除了單步調(diào)試之外做盅,用過條件斷點(diǎn),日志斷點(diǎn)么窘哈,一些很有用的debug技巧或許你不知道吹榴。。
- 臨時斷點(diǎn)
顧名思義滚婉,臨時性斷點(diǎn)腊尚,在第一次觸發(fā)后會自動被移除
觸發(fā)鍵:Alt + 鼠標(biāo)左鍵
- 禁用斷點(diǎn)
當(dāng)你需要臨時禁用一些斷點(diǎn),但不想下一次再重新創(chuàng)建這些斷點(diǎn)的時候有用
觸發(fā)鍵:Alt + 鼠標(biāo)左鍵
- 計(jì)算表達(dá)式
當(dāng)你需要臨時改變某個變量的值或者查看其內(nèi)部方法返回值時很有用
觸發(fā)鍵:Alt + F8
- 計(jì)算表達(dá)式
當(dāng)你需要臨時改變某個變量的值或者查看其內(nèi)部方法返回值時很有用
觸發(fā)鍵:Alt + F8
- 檢查表達(dá)式
不需要打開表達(dá)式計(jì)算框就可以看到計(jì)算結(jié)果
觸發(fā)鍵: 選中表達(dá)式满哪,Alt + 鼠標(biāo)左鍵
- 條件斷點(diǎn)
在特定條件下才斷點(diǎn)
觸發(fā)鍵:鼠標(biāo)右鍵點(diǎn)擊斷點(diǎn)
- 日志斷點(diǎn)
厭倦了每次輸出一個log都得重新發(fā)布項(xiàng)目婿斥?試試日志斷點(diǎn),無痛解決你的問題
觸發(fā)鍵:鼠標(biāo)右鍵點(diǎn)擊斷點(diǎn)后-->more-->勾掉suspend 屬性(應(yīng)用不掛起)-->填上想要輸出的日志信息
ADB技巧
adb作為android開發(fā)一個常用的工具哨鸭,神馬install,uninstall,push,pull命令就不用說了民宿,它還有很多有用命令。像鸡。
- 刪除文件夾及其下面所有文件
adb shell rm -r /sdcard/xx/
- 應(yīng)用程序恢復(fù)初始狀態(tài):清除數(shù)據(jù)
adb shell pm clear com.xx.xx(包名)
- 測試軟件的穩(wěn)定性活鹰、健壯
adb shell monkey --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes --ignore-native-crashes -s 100 -v -v --throttle 100 -p com.xx.xx(包名) 10000 > ~/Downloads/monkey_test.txt
- 獲取設(shè)備分辨率
adb shell wm size
或者
adb shell dumpsys display | grep DisplayDeviceInfo
adb shell dumpsys: 個人覺得是最有用的adb命令哈恰,默認(rèn)打印出當(dāng)前系統(tǒng)所有service信息,在后面可加上具體的服務(wù)名志群。 需要列出當(dāng)前運(yùn)行的服務(wù)着绷,可運(yùn)行:
adb shell dumpsys | grep DUMP
- 獲取內(nèi)存信息
adb shell dumpsys meminfo
- 要獲取具體應(yīng)用的內(nèi)存信息,可加上包名
adb shell dumpsys meminfo com.xx.xx
通常來說: Heap Free > Pss Total > Private Dirty
具體參數(shù)說明锌云,可以參考 官方文檔
- 列出系統(tǒng)所有屬性
adb shell getprop
>獲取分辨率密度:adb shell getprop |grep ro.sf.lcd_density
>獲取系統(tǒng)版本: adb shell getprop |grep ro.build.version.release
- 查看Activity任務(wù)棧
adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'
- 啟動默認(rèn)瀏覽器打開一個網(wǎng)頁
adb shell am start -a android.intent.action.VIEW -d http://baidu.com
網(wǎng)絡(luò)調(diào)試技巧
日常開發(fā)中荠医,不可避免的需要聯(lián)網(wǎng)操作,這可能就需要懂一些網(wǎng)絡(luò)調(diào)試技巧了桑涎,而抓包就是最基本的網(wǎng)絡(luò)調(diào)試技巧彬向。。
HTTP或HTTPS抓包( finddler(windows)/charles)
這個就不多說了攻冷,網(wǎng)上教程一大堆娃胆。。
TCP非實(shí)時抓包(tcpdump)
前提:Root
從 這里 下載 tcpdump
將 tcpdump 放入手機(jī):
adb push ~/tcpdump /data/local/tcpdump
將 tcpdump 的權(quán)限變?yōu)榭蓤?zhí)行:
chmod +x tcpdump
開始抓包:
/data/local/tcpdump -vv -s 0 -w /mnt/sdcard/pcapture.pcap
等曼。其中 "-s 0" 表示每個包都抓取全部長度里烦,而不是部分長度;"-w /mnt/sdcard/pcapture.pcap" 表示抓取的包寫入指定文件禁谦;"-vv" 表示顯示多一些信息胁黑,如果要顯示更多信息可以用 "-vvv"按下 "contrl+c" 結(jié)束抓包。
將"/mnt/sdcard/pcapture.pcap" 移到電腦上:
adb pull /mnt/sdcard/pcapture.pcap <指定目錄>
通過 Wireshark 或者charles進(jìn)行分析枷畏。
TCP實(shí)時抓包(wireshark+tcpdump)
基本思路:
手機(jī)開始抓包:在 adb shell 中運(yùn)行
/data/local/tcpdump -n -s 0 -w - | nc -l -p 12345
將手機(jī)抓的包傳送到電腦的 Wireshark 中:另開一個終端運(yùn)行
adb forward tcp:12345 tcp:12345 && nc 127.0.0.1 12345 | /Applications/Wireshark.app/Contents/MacOS/wireshark -k -S -i - ```