XCode / GDB теряет стек при отладке вызовов функций динамической библиотеки на iOS - PullRequest
2 голосов
/ 20 марта 2011

У меня есть проект iOS, который ссылается на внешнюю статическую библиотеку, написанную на C ++. Статическая библиотека выполняет вызовы функций, реализуемых libstdc ++, который динамически связан. Например, я вызываю функцию инициализации для этой библиотеки (назовем ее foo_init()), и она немедленно вызывает setlocale().

Статическая библиотека скомпилирована с -g, что означает, что символы отладки собираются для меня, чтобы войти в код внутри отладчика. Я успешно вхожу в foo_init(). Когда я пытаюсь перешагнуть вызов setlocale(), XCode не совсем это делает. Это заканчивается функцией под названием dyld_stub_setlocale. Эта функция является единственной jmp инструкцией для выполнения динамической загрузки и вызова функции.

Я пытался перешагнуть / войти / выйти из dyld_stub_setlocale, но они не доставили меня туда, куда я хочу, и это снова в foo_init(). Шаг за шагом и шаг в конечном итоге в stub_helpers, а шаг за шагом действует как продолжение. Если я попробую Step Over / In внутри stub_helpers, отдельные шаги XCode и окно стека с foo_init() изменятся на ??. На этом этапе дерево решений для входа / выхода взорвется, поэтому я не буду вдаваться в подробности, но никакие комбинации, которые я пробовал, не возвращались к линии после вызова setlocale.

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

Обратите внимание, что я попытался найти способ связать libstdc ++ - статический вместо этого, чтобы избежать проблем с динамическим загрузчиком, но Apple удалила библиотеку из более новых SDK, а у меня нет более старых.

Есть ли опция компоновщика или компилятора, чтобы облегчить расшифровку кода для отладчика?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...