调试本机代码时,Android Studio 中的 art_sigsegv_fault 崩溃

Teg*_*gan 6 c++ debugging java-native-interface android debug-symbols


我正在尝试调试从简单 android 应用程序中的 Java 代码 (MainActivity.OnCreate) 调用的本机 (c++) 代码的问题。我正在使用lldb进行调试并使用cmake构建本机代码。
调试按预期工作,直到我尝试进入本地语言函数,然后发生以下情况之一:
1. 调试器进入函数并允许执行进一步的步骤,但没有光标,没有正常的堆栈跟踪,也没有变量监视. 堆栈跟踪中唯一的内容是 cpp 文件的名称和内存地址(可能是指令指针?),随着我采取的每一步而增加。在我看来,没有加载调试符号。
2. 该步骤按预期成功,在短时间内我可以瞥见正确的堆栈跟踪。但是随后 lldb 崩溃,堆栈发生变化并且光标位于art_sigsegv_fault. 当我继续时,我只是收到一条消息,指出调试器已断开连接。该应用程序将继续按原样运行。

此外,我注意到在崩溃的那一刻,调试器试图从变量中收集数据,但实际上从未成功。成功解析的变量是JNI 指针jobject,而其他变量是jstring
崩溃前的几毫秒:
崩溃前的一毫秒
崩溃后:
坠机后
我试过的

  • 通过添加确保符号不会从.so文件中 删除
packagingOptions{
    doNotStrip "**/*.so"
    }  
Run Code Online (Sandbox Code Playgroud)
  • 确保 CMAKE_CXX_FLAGS 包含-O0 -ggdb在其中(无代码优化,调试编译)
  • 确保在项目结构中有调试版本,并且属性Debuggable、Jni Debuggable 和 Renderscript Debuggable设置为 true。
    项目结构
    构建类型
    我相信我已经尝试了我在这里找到的所有可能的选项,因此一个新问题起初似乎是重复的。