【问题标题】:JDB doesn't work when attaching to a running Android processJDB 在附加到正在运行的 Android 进程时不起作用
【发布时间】:2022-11-23 11:11:55
【问题描述】:

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

例如,应用程序将是计算器 (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:4445转发7777本地tcp端口到jdwp。

  7. 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


    【解决方案1】:

    如果您还运行了 Android Studio,就会发生这种情况。 Studio 通过track-jdwp 监控所有可调试进程,并将 jdwp 流量重定向到自身以密切关注应用程序生命周期(通过 DDMS)。

    关闭 Android Studio 并再次尝试相同的 jdb 命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 2015-06-06
      相关资源
      最近更新 更多