我想将调试器附加到通过USB连接的物理设备上运行的Android应用程序。该设备使用magisk进行根设置。使用resetprop
将ro.debuggable
属性也设置为1
,以使所有应用程序均可调试。
例如,应用程序将是计算器(com.android.calculator2
)。
我做的确切步骤:
adb kill-server
确保重新启动adb服务器。adb devices
再次启动服务器并确保设备已获得授权。
1.运行应用程序(在我的示例中为计算器)。adb shell ps | grep calculator
查找应用ID。
u0_a88 4445 16282 4193244 133532 0 0 S com.android.calculator2
应用程序ID为4445。
adb jdwp | grep 4445
确保应用ID在可调试应用列表中。输出:4445
。因此应用程序是可调试的。adb forward tcp:7777 jdwp:4445
将7777
本地tcp端口转发到jdwp。jdb -attach localhost:7777
将JDB连接到端口。
问题就在这里。在最后一步什么都没有发生。JDB既不退出也不连接,而且它对任何输入命令都不输出任何东西。
我还尝试了Android Studio。我尝试了两个选项。手动添加配置以连接到远程JVM并使用Attach Debugger to Android Process
选项。第一个选项(连接到远程JVM配置)不起作用。我使用了以下命令行标记:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:7777
。端口转发是以同样的方式完成的。Android Studio也不会连接,也不会退出或打印错误。只是什么都没有。
但是Attach Debugger to Android Process
选项工作得很好,它成功地连接到应用程序,我可以调试它并按预期设置断点。
我还想提一下,我之前使用了am set-debug-app
命令,让应用在启动前等待调试器连接。当使用命令行中的jdb
或Android Studio远程连接到JVM选项时,应用无法恢复,因此似乎Android根本看不到调试器。但当我通过Attach Debugger to Android Process
连接调试器时,应用程序将在按预期附加调试器后继续运行。
为什么JDB不附加到应用程序,而Android Studio通过选项Attach Debugger to Android Process
?我做错了什么?
1条答案
按热度按时间8oomwypt1#
Studio通过
track-jdwp
监控所有可调试进程,并将jdwp流量重定向到自身,以跟踪应用生命周期(通过DDMS)。关闭Android Studio,然后再次尝试相同的
jdb
命令。