【问题标题】:Debugging Android Native C++: activate breakpoint调试 Android Native C++:激活断点
【发布时间】:2012-03-22 18:04:25
【问题描述】:

我正在尝试使用 NDK 在 Android 设备上调试 C++ 本机代码。

Android.mk 已经有调试标志:

APP_OPTIM:= debug
LOCAL_CFLAGS    := -DRAPIDXML_NO_EXCEPTIONS
LOCAL_CFLAGS    += -g
LOCAL_CFLAGS    += -ggdb
LOCAL_CFLAGS    += -O1

我也尝试使用标志 -O0 而不是 -O1。

AndroidManifest.xml 也有调试模式:

     android:debuggable="true"

所以,我们开始吧……我在代码中设置了一些断点,以便一步一步地观察它。去终端输入:

$ adb shell ps |grep packtpub
app_57    24084 117   467368 49136 ffffffff 00000000 S com.packtpub.app3D

然后运行调试:

$ ndk-gdb --verbose --force
...
Launched gdbserver succesfully.
Setup network redirection
## COMMAND: /home/android-sdks/platform-tools/adb forward tcp:5039 localfilesystem:/data/data/com.packtpub.app3D/debug-socket
## COMMAND: /home/android-sdks/platform-tools/adb shell run-as com.packtpub.app3D lib/gdbserver +debug-socket --attach 1822
## COMMAND: /home/android-sdks/platform-tools/adb pull /system/bin/app_process ./obj/local/armeabi/app_process
Attached; pid = 1822
Listening on sockaddr socket debug-socket
Pulled app_process from device/emulator.
## COMMAND: /home/android-sdks/platform-tools/adb pull /system/lib/libc.so ./obj/local/armeabi/libc.so
Pulled libc.so from device/emulator.

应用程序启动并运行。但是没有出现断点。 (gdb) 提示似乎都不允许我设置命令。

我尝试了两种方式:从 Eclipse IDE 和使用命令行的控制台。同样的事情也会发生。

有什么建议可以发现缺少的东西以进行调试并让断点正常工作吗?

非常感谢所有 cmets 和建议。


所以...我一直在努力解决为什么 ndk-debug 没有运行。也许我遇到了一些可以对此有所启发的东西:

我也添加到了Android.mk:

APP_MODULES := callbacks
APP_PLATFORM := android-14

在终端的命令行上:

$ android update project -p . --target android-14

它给出了信息:

Error: Target id 'android-14' is not valid. Use 'android list targets' to get the target ids.

然后我们在运行列表目标时获得输出:

$ android list targets
id: 1 or "android-15"
Name: Android 4.0.3
Type: Platform
API level: 15
...
id: 2 or "Google Inc.:Google APIs:15"

另一方面,只有当我输入“android-15”时,它才会在命令行上编译和构建,但它不会在具有“android-14”的设备(三星 Nexus)中运行。在 AndroidManifest.xml 中设置为 14,以允许应用程序从 Eclipse IDE 编译、加载和在设备中运行:

<uses-sdk android:targetSdkVersion="14" android:minSdkVersion="14">

在 Eclipse IDE 中,它像 Android-14 一样编译和运行,没有任何抱怨。当被要求在 Eclipse IDE 上运行 ndk-debug 时,它也没有像我之前的帖子中提到的那样抱怨,但是 (gdb) 也没有出现。

但是,当我尝试在命令行上运行 ndk-debug 时,它会抱怨并显示它没有附加调试器:

$ ndk-gdb --verbose --force
...
Launched gdbserver successfully.
## COMMAND: /home/android-sdks/platform-tools/adb shell run-as com.packtpub.app3D lib/gdbserver +debug-socket --attach 7722
## COMMAND: /home/android-sdks/platform-tools/adb pull /system/bin/app_process ./obj/local/armeabi/app_process
Cannot attach to process 7722: Operation not permitted (1)
Pulled app_process from device/emulator.

ndk-gdb 不工作与目标版本有关?

有什么建议或解决方法可以修复它并使有可能有活动断点来调试 NDK?

提前致谢。

【问题讨论】:

    标签: android c++ debugging gdb android-ndk


    【解决方案1】:

    解决了在调试环境中安装 API 14 的问题,并创建了一个完全为 API 14 的新项目。现在它可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 2020-09-27
      • 1970-01-01
      • 2014-02-21
      相关资源
      最近更新 更多