【问题标题】:Android native debug compiled with externalNativeBuild.ndkBuild使用 externalNativeBuild.ndkBuild 编译的 Android 原生调试
【发布时间】:2017-01-17 08:51:42
【问题描述】:

我想在以下示例中调试 Android Studio(2.2 版)中的原生代码:https://github.com/googlesamples/android-ndk/tree/master-ndkbuild

我尝试编辑应用运行/调试配置并将调试器类型更改为原生或混合,但未成功。还尝试附加调试器选择混合或本机,但当调试器连接到进程时,应用程序不会在 C++ 代码中的断点处停止。

我有更大的项目,其构建类似于链接示例。目前无法重建 makefile,因此我想使用这种类型或项目设置运行调试。这种项目设置意味着;将 externalNativeBuild 与 ndk-build 一起使用。

有人知道如何调试这些示例吗?

【问题讨论】:

  • @LBes 他在谈论 Android Studio 2.2 中的新功能,即 externalNativeBuild...
  • 我已经设法使用 cmake 作为 externalNativeBuild 和 NDK r12+ 来调试本机本机代码。仍然无法使用 ndk-build 进行调试...看起来我必须将所有构建脚本重写为 cmake。
  • @marioc64 关于使用 cmake 作为 externalNativeBuild 进行本地调试的任何提示?我仍然无法在本机代码中遇到任何断点。

标签: android c++ debugging android-ndk


【解决方案1】:

在应用程序的build.gradle:

buildTypes {
    debug {
        debuggable true
        initWith debug
        jniDebuggable true
        externalNativeBuild {
            ndkBuild {
                cFlags "-DDEBUG=1"
            }
        }
    }
}

cFlags 是可选的,但很有用。 official Google docs没有描述,我在Android Gradle plugin DSL docs找到了

适用于 Android Studio 2.2.2+

【讨论】:

  • 感谢您的回复,反正我的原生构建被重写为 cmake。
【解决方案2】:

不幸的是,AS + gradle + ndk-build 不支持从 IDE 进行调试。解决的办法是把buildscripts重写成cmake。

【讨论】:

  • 这不是真的。调试与库的生成方式无关。
  • 你是对的,但问题是关于调试与 Android Studio (IDE) 的集成,而不是调试。
  • Studio 只需启动 LLDB 并将其连接到进程。 cmake 或 ndk-build 没有任何东西可以启用或阻止它。只要带有调试信息的原始库可用,LLDB 就可以处理它。
  • 这是可能的,但 gradle android 插件应该默认将所有标志设置为正确的状态。可能@SBKarr 答案是解决方案,但目前我没有检查这个,因为我的构建已切换到 cmake。
猜你喜欢
  • 2013-02-02
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 2017-04-14
  • 2012-02-14
  • 2011-11-11
  • 2017-11-02
  • 2016-03-07
相关资源
最近更新 更多