Visual Studio - Android - GDB неожиданно завершил работу с кодом выхода -1073741571 (0xC00000FD): при загрузке символов - PullRequest
0 голосов
/ 30 января 2020

У меня установлено приложение C ++ gradle в Visual Studio 2019 Community Edition, предназначенное для Android. Я использую NDK 20 (последняя версия Microsoft android sdk repo).

Это приложение состоит из нескольких библиотек .so (SDL2, SDL2_image, SDL2_ttf, WolfSSL, MyGameCode, MyGameLibrary, MiscellaneousExternalDependencies.a ) и все вроде бы компилируется и работает правильно. Проблема, с которой я столкнулся, заключается в том, чтобы прикрепить точку останова и увидеть, как GDB пытается загрузить символы для соответствующего .so (в данном случае моего кода игры).

Я провел некоторое тестирование и обнаружил, что если я удаляю из всего моего игрового кода я могу получить точки останова, которые можно использовать только с моей библиотекой и всеми другими зависимостями. Я также проверил и обнаружил, что большинство моих игровых файлов все еще работает. Тем не менее у меня есть около 10 файлов, которые, если я удаляю их, все, кажется, загружается просто отлично. Для загрузки символов требуется около 42 секунд, когда у меня есть урезанная версия моего проекта, которая позволяет нажимать точки останова.

Кажется, что это всего символы в проекте, а не какой-либо конкретный c код, запущенный в течение времени жизни приложения, так как у меня задано основное определение в C ++, которое не загружает мой игровой код и просто запускает простой тест SDL2 и, просто изменив количество файлов, включенных в проект, я могу воспроизвести GDB cra sh или исключите его.

Я должен отметить, что мой проект работает нормально без подключенного отладчика, и я вижу выходные данные модулей C ++, в которых я пытаюсь установить точки останова. У меня ограниченная проблема когда я пытаюсь подключиться к GDB и получить доступ к точке останова через Visual Studio. В этот момент я получаю то, что выглядит как переполнение стека (или, возможно, тайм-аут?) Во время процесса загрузки символа.

Мой вопрос здесь имеет несколько пунктов:

  • GDB имеет какой-то символьный предел?
    • Если так, есть ли способ удалить неиспользуемые символы из конечного ".so" в процессе сборки из Visual Studio? Я хочу, чтобы процесс сборки был простым для выполнения.
    • Если нет, могу ли я каким-то образом разбить свой проект с помощью файлов .so или .a, чтобы обойти это? Похоже, в настоящее время это не имеет значения, если я сделаю это, поэтому я буду признателен за дополнительные советы!
  • Позволяет ли мне обертка Visual Studio от GDB и эмулятор Android тайм-аут, если есть тайм-аут? Если бы я мог указать его примерно за 200 секунд, это определенно было бы более чем достаточным временем для загрузки символов .so моего проекта.
  • Существуют ли другие возможные объяснения сбоя при загрузке символов таким способом, которые имеют правдоподобную работу?

По сути, я не знаю, почему происходит сбой при загрузке символов для моего .so файла

Я предоставил здесь дополнительную информацию, включая ссылку на мой проект и точную методологию тестирования. , но полный смысл этого вопроса присутствует в этом посте.

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

1 Ответ

0 голосов
/ 30 января 2020

Оказывается, замена файлов gdb.exe и gdb-orig.exe из моей версии Microsoft Hosted NDK 20.0.5594570 на те, которые я получил при загрузке NDK 21, доступные здесь, решила проблему (r21 на момент написания): https://developer.android.com/ndk/downloads

Должен быть дефект, который недавно был устранен в самой GDB и который имел проблемы с размером и / или составом моего проекта. Однако версия GDB в комплекте с NDK r21 работает отлично.

...