我在针对Android的Visual Studio 2019社区版中设置了一个C ++ gradle应用程序。我正在使用NDK 20(Microsoft的android sdk存储库中的最新版本)。
此应用程序由几个.so库(SDL2,SDL2_image,SDL2_ttf,WolfSSL,MyGameCode,MyGameLibrary,MiscellaneousExternalDependencies.a)组成,并且似乎都可以正确编译和运行。我遇到的问题是附加一个断点,并看到GDB试图为相关的.so(在这种情况下,我的游戏代码专门)加载符号。
我进行了一些测试,发现如果我剥离所有游戏代码,则可以得到断点,仅使用我的库和所有其他依赖项即可。我还进行了测试,发现包括我的大多数游戏文件仍然可以运行。但是我有大约10个文件,如果删除它们,一切似乎都可以正常加载。当我有一个精简版本的项目可以加载断点时,加载符号大约需要42秒。
这似乎是项目中的全部符号,而不是应用程序生命周期中运行的任何特定代码,因为我指定了C ++的主要功能,该功能不会加载任何游戏代码,而仅运行简单的SDL2测试,更改项目中包含的文件数,我可以重现GDB崩溃或消除它。
我应该注意,我的项目在没有连接调试器的情况下似乎运行良好,并且可以看到我试图设置断点的C ++模块的输出。我遇到的问题仅限于尝试连接GDB时并通过Visual Studio访问断点。到那时,我发现在符号加载过程中似乎是堆栈溢出(或者可能是超时?)。
我的问题在这里有几点要点:
基本上我不知道为什么在为我的.so文件加载符号时会崩溃
我在这里提供了更多详细信息,包括指向我的项目的链接和确切的测试方法,但是此问题的全部要点在本文中。
答案 0 :(得分:0)
事实证明,将我的Microsoft托管NDK版本20.0.5594570中的gdb.exe和gdb-orig.exe文件替换为我从此处下载的NDK 21下载获得的文件即可解决问题(在撰写本文时,r21): https://developer.android.com/ndk/downloads
必须存在一个缺陷,该缺陷最近已在GDB中解决,并且与我的项目规模和/或组成有关。但是,NDK r21捆绑版的GDB可以完美运行。