Android Studio c++ 无法单步调试的系列坑

从Android Studio 2.2开始,Android Studio开始支持C++单步调试,为我们开启了一扇大门,开发效率大大提高。

但不可避免,新生事物存在他的不完美问题。今天遇到一个非常奇葩的现象。在使用Android Studio断点调试时发现:Java层的断点能够正常调试,但JNI c++层的断点无法正常调试。

解决思路:

  1. 从log入手,查看log发现中存在奇怪的Warning:
07-13 20:00:31.273 18569-18569/com.elevoc.gowildpcm W/linker: libnative-lib2.so: unused DT entry: type 0x6ffffffe arg 0x7aa0
07-13 20:00:31.273 18569-18569/com.elevoc.gowildpcm W/linker: libnative-lib2.so: unused DT entry: type 0x6fffffff arg 0x3
07-13 20:00:31.274 18569-18569/com.elevoc.gowildpcm W/linker: libgnustl_shared.so: unused DT entry: type 0x6ffffffe arg 0x47438
07-13 20:00:31.274 18569-18569/com.elevoc.gowildpcm W/linker: libgnustl_shared.so: unused DT entry: type 0x6fffffff arg 0x3

有点摸不清头脑。求助与强大的Google,stackoverflow后依然没啥结果。

  1. 猜测是否因为最近更新NDK导致或者设备出问题(就不得不吐槽这个实验平台的稳定性和易用性了)。实验:新建Jni工程,Run,发现竟然是好的。

  2. 两次尝试失败后,我开始对比两个工程配置的区别。发现我正式工程用Android.mk(ndk)方式构建,而刚新建的Demo工程默认是用cmake方式构建。莫非升级NDK后不支持Android.mk构建方式了???不会吧。把Demo工程也更改为Android.mk方式试试,结果更改后Demo工程依然完好。

  3. 实在想不到什么可能了。往前回溯,想到之前在执行‘‘Clean Project’’时遇到了问题,曾手动删除了build目录、隐藏文件夹".externalNativeBuild"及工程iml文件,猜测可能是工程配置出了问题。通过如下尝试,最终解决:

    • 删除gradle中ndkBuild配置
      ndkBuild {
           path 'src/main/jni/Android.mk'
      }
      
    • Sync Now后,选择工程->右键,出现 “Link C++ Project with Gradle”,如下图。


      Android Studio c++ 无法单步调试的系列坑_第1张图片
      Link C++ Project with Gradle.png

      选择对应的Android.mk后,重新Clean、Build、Debug,一切恢复正常。

吐了一口老血

你可能感兴趣的:(Android Studio c++ 无法单步调试的系列坑)