У меня установлено приложение 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