【问题标题】:Visual Studio - Android - GDB exited unexpectedly with exit code -1073741571 (0xC00000FD) : While Loading SymbolsVisual Studio - Android - GDB 意外退出,退出代码为 -1073741571 (0xC00000FD):加载符号时
【发布时间】:2020-01-29 22:53:07
【问题描述】:

我在面向 Android 的 Visual Studio 2019 社区版中设置了 C++ gradle 应用程序。我正在使用 NDK 20(Microsoft 的 android sdk repo 中的最新版本)。

这个应用程序由几个 .so 库(SDL2、SDL2_image、SDL2_ttf、WolfSSL、MyGameCode、MyGameLibrary、MiscellaneousExternalDependencies.a)组成,并且似乎都能正常编译和运行。我遇到的问题是附加断点并看到 GDB 试图加载关联 .so 的符号(在这种情况下,特别是我的游戏代码)。

我进行了一些测试,发现如果我删除所有游戏代码,我可以只使用我的库和所有其他依赖项来获得断点。我也测试过,发现包括我的大部分游戏文件仍然可以运行。但是我有大约 10 个文件,如果我删除它们,一切似乎都加载得很好。当我的项目有一个允许断点的精简版本时,加载符号大约需要 42 秒。

这似乎是项目中的全部符号,而不是在应用程序生命周期内运行的任何特定代码,因为我在 C++ 中指定了一个主函数,它不会加载我的任何游戏代码,只是运行一个简单的 SDL2 测试,只需通过更改项目中包含的文件数量我可以重现 GDB 崩溃或消除它。

我应该注意,我的项目似乎在没有附加调试器的情况下运行良好,并且我可以看到我试图在其中设置断点的 C++ 模块的输出。我遇到的问题仅限于我尝试连接 GDB 时并通过 Visual Studio 访问断点。那时,在符号加载过程中,我得到了似乎是堆栈溢出(或者可能是超时?)。

我的问题有几个要点:

  • GDB 是否有某种符号限制?
    • 如果是这样,有没有办法在 Visual Studio 的构建过程中从最终的“.so”中去除未使用的符号?我想让我的构建过程易于执行。
    • 如果不是,我可以使用 .so 或 .a 文件以某种方式分解我的项目来解决这个问题吗?如果我这样做,目前似乎没有什么不同,因此我们将不胜感激!
  • 如果出现超时,Visual Studio 的 GDB 包装器和 Android 模拟器是否允许我增加超时?如果我可以在 200 秒内指定它,那肯定有足够的时间来加载我的项目的 .so 符号。
  • 对于以这种方式加载符号时崩溃有任何其他可能的解释吗?

基本上我不知道为什么它在为我的 .so 文件加载符号时崩溃

我在此处提供了更多详细信息,包括指向我的项目的链接和确切的测试方法,但此问题的全部主旨已在本文中提供。

https://developercommunity.visualstudio.com/content/problem/898890/gdb-exited-unexpectedly-with-exit-code-1073741571.html

【问题讨论】:

    标签: c++ visual-studio android-ndk gdb clang


    【解决方案1】:

    事实证明,将我的 Microsoft Hosted NDK 版本 20.0.5594570 中的 gdb.exe 和 gdb-orig.exe 文件替换为我从下载 NDK 21 获得的文件解决了问题(在撰写本文时为 r21): https://developer.android.com/ndk/downloads

    最近在 GDB 本身中必须存在一个缺陷,该缺陷与我的项目大小和/或组成有问题。然而,NDK r21 捆绑版本的 GDB 可以完美运行。

    【讨论】:

      猜你喜欢
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 2014-04-28
      • 2016-08-11
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多