jdb 包含在jdk,使用jdb 之前需要先配置jdk的環境變數。
jdb 常用於三方apk 無原始碼動態除錯,與其配合的工具為 baksmali、apkanalyser,
通過apkanalyser列印堆疊,理清楚正常情況下的**流程。
使用baksmali,獲取 相關 的方法名,變數名,
使用jdb 動態除錯,獲取這些值。
jdb除錯流程為:
1、開啟ddms 獲取需要除錯程序的埠號
或者 使用命令,建立對應程序的除錯橋(有時好使,有時不好使,不知道為啥,望有人指點一下)
adb jdwp 檢視可除錯的 pid
netstat -nlt|grep locals_port 檢視埠是否被占用,被占用了換乙個。
adb forward tcp:locals_port jdwp:使用本地埠除錯 指定pid
2、linux 下: jdb -attach 127.0.0.1:port
window 下為: jdb -connect com.sun.jdi.socketattach:hostname=localhost,port=???
3、進入jdb除錯內, 結合之前apkanalyser 獲取到的堆疊 ,打斷點,也可以在jdb中呼叫
classes 列舉出已經載入的類
class -- 顯示指定類的詳細資訊
methods -- 顯示指定的 所有繼承、實現、自定義的方法
fields -- 列出類的字段
獲取到需要除錯的方法,使用stop in class-name.method 或 stop in at class-name:line 在相應處打斷點
4、正常操作apk,執行到斷點處會停下來,
可以使用where 獲取斷點之前的呼叫棧,
使用locals 獲取當前的變數值,
使用print 輸出乙個表示式的值
使用cont 恢復執行
使用step 單步除錯。
5、jdb 除錯 內部類
stop in com.android.server.類$內部類.方法
常用的就這些,也可以在jdb中使用? 檢視詳細文件。
6、jdb 除錯ibinder
android 中都是通過binder 進行通訊的,每乙個 aidl 檔案都會有他的 自動實現類,通過jdb 來除錯他的最終實現類:
例如:ps:
需要注意的是:
最終實現類
JDB除錯之小試牛刀
用jdk自帶工具jdb除錯示例程式hellojdb d jdb hellojdb hellojdb 如下 public class hellojdb 編譯hellojdb j ac g hellojdb.j a注意 g選項表示生成除錯資訊,否則使用locals命令不能檢視本地變數除錯方式執行 j a...
linux除錯簡介
您可以用各種方法來監控執行著的使用者空間程式 可以為其執行偵錯程式並單步除錯該程式,新增列印語句,或者新增工具來分析程式。本文描述了幾種可以用來除錯在 linux 上執行的程式的方法。我們將回顧四種除錯問題的情況,這些問題包括段錯誤,記憶體溢位和洩漏,還有掛起 當您的程式中包含錯誤時,很可能在 中某...
Android串列埠除錯
前面有乙個客戶需要系統支援pl2303的usb轉串列埠線,通過otg線連線了pad,但是pad可以識別到裝置後,一直無法收發資料,開始的時候,再android上無法正常開啟裝置,許可權不夠,後面root後修改許可權,可以正常開啟了 其實可以通過修改ueventd.rc,這個檔案,修改掛載裝置的許可權...