作為一名碼農(nóng),代碼調(diào)試是一項(xiàng)不可或缺的工作,過程中總能發(fā)現(xiàn)一下能提高效率、有用的小技巧,此文特總結(jié)一些工作用到的一些調(diào)試技巧。
Debug技巧
斷點(diǎn)debug大家都會(huì)使用,但除了單步調(diào)試之外,用過條件斷點(diǎn),日志斷點(diǎn)么,一些很有用的debug技巧或許你不知道。。
- 臨時(shí)斷點(diǎn)
顧名思義,臨時(shí)性斷點(diǎn),在第一次觸發(fā)后會(huì)自動(dòng)被移除

觸發(fā)鍵:Alt + 鼠標(biāo)左鍵
- 禁用斷點(diǎn)
當(dāng)你需要臨時(shí)禁用一些斷點(diǎn),但不想下一次再重新創(chuàng)建這些斷點(diǎn)的時(shí)候有用

觸發(fā)鍵:Alt + 鼠標(biāo)左鍵
- 計(jì)算表達(dá)式
當(dāng)你需要臨時(shí)改變某個(gè)變量的值或者查看其內(nèi)部方法返回值時(shí)很有用

觸發(fā)鍵:Alt + F8
- 計(jì)算表達(dá)式
當(dāng)你需要臨時(shí)改變某個(gè)變量的值或者查看其內(nèi)部方法返回值時(shí)很有用

觸發(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)
厭倦了每次輸出一個(gè)log都得重新發(fā)布項(xiàng)目?試試日志斷點(diǎn),無痛解決你的問題

觸發(fā)鍵:鼠標(biāo)右鍵點(diǎn)擊斷點(diǎn)后-->more-->勾掉suspend 屬性(應(yīng)用不掛起)-->填上想要輸出的日志信息
ADB技巧
adb作為android開發(fā)一個(gè)常用的工具,神馬install,uninstall,push,pull命令就不用說了,它還有很多有用命令。。
- 刪除文件夾及其下面所有文件
adb shell rm -r /sdcard/xx/
- 應(yīng)用程序恢復(fù)初始狀態(tài):清除數(shù)據(jù)
adb shell pm clear com.xx.xx(包名)
- 測(cè)試軟件的穩(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: 個(gè)人覺得是最有用的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'
- 啟動(dòng)默認(rèn)瀏覽器打開一個(gè)網(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)
這個(gè)就不多說了,網(wǎng)上教程一大堆。。
TCP非實(shí)時(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" 表示每個(gè)包都抓取全部長度,而不是部分長度;"-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í)時(shí)抓包(wireshark+tcpdump)
基本思路:

手機(jī)開始抓包:在 adb shell 中運(yùn)行
/data/local/tcpdump -n -s 0 -w - | nc -l -p 12345將手機(jī)抓的包傳送到電腦的 Wireshark 中:另開一個(gè)終端運(yùn)行
adb forward tcp:12345 tcp:12345 && nc 127.0.0.1 12345 | /Applications/Wireshark.app/Contents/MacOS/wireshark -k -S -i - ```