debugging 连接到正在运行的Android进程时,JDB无法工作

33qvvth1  于 2022-11-24  发布在  Android
关注(0)|答案(1)|浏览(185)

我想将调试器附加到通过USB连接的物理设备上运行的Android应用程序。该设备使用magisk进行根设置。使用resetpropro.debuggable属性也设置为1,以使所有应用程序均可调试。
例如,应用程序将是计算器(com.android.calculator2)。
我做的确切步骤:

  1. adb kill-server确保重新启动adb服务器。
  2. adb devices再次启动服务器并确保设备已获得授权。
    1.运行应用程序(在我的示例中为计算器)。
  3. adb shell ps | grep calculator查找应用ID。
u0_a88        4445 16282 4193244 133532 0                   0 S com.android.calculator2

应用程序ID为4445。

  1. adb jdwp | grep 4445确保应用ID在可调试应用列表中。输出:4445。因此应用程序是可调试的。
  2. adb forward tcp:7777 jdwp:44457777本地tcp端口转发到jdwp。
  3. 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?我做错了什么?
8oomwypt

8oomwypt1#

Studio通过track-jdwp监控所有可调试进程,并将jdwp流量重定向到自身,以跟踪应用生命周期(通过DDMS)。
关闭Android Studio,然后再次尝试相同的jdb命令。

相关问题