Шаг с нативным кодом приводит к мусору в Android Studio

У меня есть собственный код, который я создал с помощью Gradle в Android Studio. Кажется, что большая часть отладки работает нормально в C ++, но я просто добавил новый класс, и когда я пытаюсь вмешаться в вызов функции, он приводит меня в совершенно странное место в совершенно не связанной области кода.

Например, у меня есть следующая строка кода с точкой останова:

SemVer ver_cl = PlatformHelper::getAppVersion();

Я бегу «Step In», и я в конечном итоге gnu-libstdc++ реализация hashtable.h на кажущейся произвольной строке кода.

Я бегу в симуляторе. Я удостоверился, что синхронизировал свой проект с файлами Gradle, но я не уверен, что может быть причиной такого поведения.

0

Решение

Реализация PlatformHelper::getAppVersion(); может дать представление о проблеме. В данном конкретном случае оказалось, что метод не имеет возвращаемого значения. За исторические причины, это не ошибка в C ++, но современные компиляторы обычно выдают предупреждение в таких ситуациях и добавляя -Werror Флаг компиляции для GCC вы можете заставить его воспринимать предупреждения как ошибки. Когда не пустой метод не возвращает значение, стек повреждается и управление возвращается в случайное место. aardvarkk «повезло», что адрес оказался действительным.

Еще одна ситуация, когда подобное поведение наблюдается, когда вы компилируете свой код с оптимизацией (что-либо, кроме -O0). Одним из самых сильных методов оптимизации является встраивание: тела функций вставляются непосредственно в то место, где они вызываются. Это особенно хорошо работает для шаблонов. Недостатком этого процесса является то, что некоторые функции полностью исключены, и они не видны в трассировке стека. Так что возможно, что когда вы вступаете в PlatformHelper::getAppVersion(); вы напрямую перетаскиваете куда-то в его внутренности, где используется hashmap, потому что весь код между вызовами getAppVersion и использование хэш-карты было оптимизировано. Но в этом случае ваша программа будет работать правильно, только отладка будет немного обременена.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector