本机代码中的断点无法在 Android Studio 上命中 [重复]

Posted

技术标签:

【中文标题】本机代码中的断点无法在 Android Studio 上命中 [重复]【英文标题】:Breakpoints in native codes cannot be hit on Android Studio [duplicate] 【发布时间】:2021-01-19 07:22:56 【问题描述】:

我最近在做android原生库的开发,需要熟悉Android Studio。通过这个sample,我学到了一些关于 ndk 和 jni 例程的基础知识。但是,我一直在调试此示例的本机代码。特别是,ndk 的调试器适用于模拟器(Nexus 5X API 29 x86),而原生代码中的断点无法在真实设备(HUAWEI P9,android Oreo)上运行。此外,Java 代码中的断点在真实设备上也能正常工作。

app的gradle脚本如下:

apply plugin: 'com.android.application'

android 
    compileSdkVersion 29
    ndkVersion '21.2.6472646'
    
    defaultConfig 
        applicationId 'com.android.gl2jni'
        minSdkVersion 14
        targetSdkVersion 28
        externalNativeBuild 
            cmake 
                // Available arguments are inside $SDK/cmake/.../android.toolchain.cmake file
                arguments '-DANDROID_STL=c++_static'
            
        
    

    buildTypes 
        release 
            minifyEnabled = false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                          'proguard-rules.pro'
        
    
    externalNativeBuild 
        cmake 
            version '3.10.2'
            path 'src/main/cpp/CMakeLists.txt'
        
    

其他详情: 使用 Android Studio 的“分析 APK”实用程序,我检查了我设备上安装的内容: 然后我在$project root/app/build/intermediates/cmake/debug/obj/arm64-v8a 上找到了一个更大的库: APK中的原生库的调试符号似乎被剥离了,而且android studio没有打包适当的原生库进行调试?

【问题讨论】:

【参考方案1】:

您在 APK 分析器中看到的不是文件大小,而是 打包 大小(二进制文件被压缩,除非您的清单中有 extractNativeLibs=false)。

无论如何,您似乎在这里遇到了特定于设备的问题,请参阅 Not working - Debug Mode native code (c/c++) on Android studio with tablet HUAWEI MediaPad M5

【讨论】:

以上是关于本机代码中的断点无法在 Android Studio 上命中 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

尽管启用了本机代码调试,但仍无法从托管调试本机代码

NDK调试,无法设置断点

尽管启用了本机代码调试,但是仍无法从托管调试本机代码

Android Studio 附加到进程未找到本机符号

调试信息(断点等)存储在 VS2013、本机 C++ dll 项目中的位置在哪里?

Android LocalSocket客户端无法连接到抽象命名空间中的本机服务套接字