У меня есть проект 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, а у меня нет более старых.
Есть ли опция компоновщика или компилятора, чтобы облегчить расшифровку кода для отладчика?