【发布时间】:2022-11-23 11:11:55
【问题描述】:
我想将调试器附加到通过 USB 连接的物理设备上运行的 android 应用程序。
该设备使用 magisk 植根。 ro.debuggable 属性也设置为 1 使用 resetprop 使所有应用程序都可调试。
例如,应用程序将是计算器 (com.android.calculator2)。
我做的具体步骤:
-
adb kill-server确保重新启动 adb 服务器。 -
adb devices再次启动服务器并确保设备已被授权。 -
运行应用程序(在我的示例中为计算器)。
-
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附加到应用程序? 我做错了什么?
【问题讨论】:
标签: java android debugging adb