JDB 在附加到正在运行的 Android 进程时不起作用



我想将调试器附加到通过USB连接的物理设备上运行的android应用程序。该设备使用magisk进行了根操作。ro.debuggable属性也使用resetprop设置为1,以使所有应用程序都可调试。

例如,该应用程序将是计算器(com.android.calculator2(。

我做的确切步骤:

  1. adb kill-server请确保重新启动adb服务器。

  2. adb devices再次启动服务器,并确保设备已获得授权。

  3. 运行应用程序(在我的例子中是计算器(。

  4. adb shell ps | grep calculator查找应用程序ID。

    u0_a88        4445 16282 4193244 133532 0                   0 S com.android.calculator2
    

    应用程序ID为4445。

  5. adb jdwp | grep 4445确保应用程序id在可调试的应用程序列表中。输出:4445。因此该应用程序是可调试的。

  6. adb forward tcp:7777 jdwp:44457777本地tcp端口转发给jdwp。

  7. jdb -attach localhost:7777将JDB连接到端口。

问题就在这里。最后一步什么也没发生。JDB既不退出也不连接,而且它不会在任何输入命令上输出任何内容。

我也试过安卓工作室。我试了两种选择。手动添加配置以连接到远程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连接?我做错了什么?

如果同时运行Android Studio,就会发生这种情况。Studio通过track-jdwp监控所有可调试的进程,并将jdwp流量重定向到它自己,以监视应用程序的生命周期(通过DDMS(。

关闭Android Studio,然后再次尝试相同的jdb命令。

最新更新