jdb 除錯android 簡介

2021-07-10 22:12:47 字數 1229 閱讀 1708

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,這個檔案,修改掛載裝置的許可權...