【问题标题】:Not able to attach the ndk-gdb to the android application无法将 ndk-gdb 附加到 android 应用程序
【发布时间】:2014-06-27 18:42:53
【问题描述】:

我正在尝试将 ndk-gdb 附加到我的 Android 应用程序。

我使用的是Android-ndk-r6b,设备是Android 2.3,Samsung Galaxy S II。

我按照这个例子中的所有步骤Click here for the example

我也尝试使用一个应用程序,当我试图将 gdb 与另一个应用程序附加时,但详细显示它总是附加到第一个应用程序本身

Found package name: <1st attached package name>

我第一次尝试使用此命令启动ndk-gdb

 ndk-gdb --start --force --verbose

我尝试使用以下命令附加到另一个应用程序但无法成功:

ndk-gdb --launch=com.example.hellogdbserver.HelloGdbServer --force --verbose

第一次申请时总是出现以下错误:

ERROR: Non-debuggable application installed on the target device.Please re-install the debuggable version!

这是我得到的完整的 shell 日志

    sh-4.1$ ndk-gdb --verbose --start --force
    Android NDK installation path: /cygdrive/c/Android/android-ndk
    Using default adb command: /cygdrive/c/Android/android-sdk-windows/platform-tools/adb
    ADB version found: Android Debug Bridge version 1.0.26
    Using final ADB command: '/cygdrive/c/Android/android-sdk-windows/platform-tools/adb'
    Using auto-detected project path: /cygdrive/d/EclipseTestWorkspace/hello-gdbserver
    Found package name: com.example.hellogdbserver
    ABIs targetted by application: armeabi
    Device API Level: 10
    Device CPU ABIs: armeabi-v7a armeabi
    Compatible device ABI: armeabi
    Found debuggable flag: true
    Found device gdbserver: /data/data/com.example.hellogdbserver/lib/gdbserver
    Using gdb setup init: /cygdrive/d/EclipseTestWorkspace/hello-gdbserver/libs/armeabi/gdb.setup
    Using toolchain prefix: /cygdrive/c/Android/android-ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-
    Using app out directory: /cygdrive/d/EclipseTestWorkspace/hello-gdbserver/obj/local/armeabi
    ERROR: Could not extract package's data directory. Are you sure that
           your installed application is debuggable?
    sh-4.1$

请告诉我如何解决上述错误以及如何附加到新包。

我的手机没有root。希望这不会影响 gdb。

这也没有帮助Link to similar problem。由于我的手机是新手机,除了当前正在开发的应用程序之外,没有任何应用程序。 (只有三星手机自带的包,市面上没有下载应用。)

感谢和问候,
SSuman185


请通过链接Debugging native code in android app using the android ndk gdb

【问题讨论】:

  • 你试过在你的清单中设置 android:debuggable="true"> 吗?
  • 是的,我已经将此标志设置为 true --
  • 在我的三星 Infuse 上看到了同样的情况。你找到解决办法了吗?

标签: android gdb android-ndk


【解决方案1】:

请首先确保您正在构建应用的可调试版本。 AndroidManifest.xml 文件应包含 android:debuggable="true" 标记。

您也可以通过在 bin 目录中找到 APK 文件,解压缩它(它只是一个重命名的 ZIP 文件)并确保 lib\armeabi 文件夹包含 gdbserver 文件来检查它。

如果满足以上两个条件,请尝试在设备上手动安装包:

<android-sdk>\platform-tools\adb.exe install -r <your-package-file.APK>

请仔细观察 adb.exe 的输出。如果它显示错误,它可能会解释您的问题。

【讨论】:

  • 我没有在我的 lib/armeabi 文件夹中看到 adbserver 文件。我正在设置 android:debuggable="true" 并且正在运行 ndk-build NDK_DEBUG=1 并且正在 Application.mk 中设置 APP_OPTIM := debug。关于如何确保 adbserver 被编译并插入 armeabi 文件夹,您有什么建议吗?
【解决方案2】:

如果您尝试调试库项目,则会出现此问题。 ndk-gdb 无法附加到非“主要”项目。

您必须将您的 jni 代码放入启动应用程序项目中。

【讨论】:

    【解决方案3】:

    确保 jni/Application.mk 中的 APP_OPTIM 设置为调试

    【讨论】:

    • 那个标志有什么作用?它与 NDK_DEBUG=1 不同吗?
    【解决方案4】:

    根据http://developer.samsung.com/forum/thread/ndk-debugging-with-gdb/77/178834 的说法,一些三星手机在没有 root 的情况下无法进行原生调试,因为 run-as 已损坏

    请参阅run-as Package 'a.b.c' is unknown - Galaxy S4 Jellybean or Android 4.3 了解我的解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多