Я взял на себя довольно большой и сложный проект. Часть его представляет собой статическую (C++) библиотеку, которая создается файлом Xcode (который, по-моему, был создан CMake, я считаю...)
Само приложение находится в совершенно другом проекте.
Когда я отлаживаю приложение и хочу войти в библиотеку, отображается только сборка. Символы все, кажется, есть, заметно вывод начинается с MyApp'Foo::bar(char const*) at Foo.cpp:102:
и я вижу такие вещи, как 0x1507a6: bl 0x150838; Foo::fazbar(int) at Foo.cpp:206
0x1507a6: bl 0x150838; Foo::fazbar(int) at Foo.cpp:206
Это, для меня, говорит, что символизация существует и фактически работает.
Теперь Foo.cpp находится на моей машине. Я могу открыть этот файл, и действительно, на строке 206 вызывается Foo :: fazbar.
Выходные данные nm
и otool
также не выглядят подозрительными.
Почему lldb (отладчик Xcode) не находит мой файл? Как я могу указать lldb, где находятся файлы?
Любые указатели оцениваются.
Вы перемещали исходные файлы по сравнению с тем, когда была построена библиотека?
.o
) и в пакетах dSYM (.dSYM
). Когда вы компилируете и тестируете программу, Xcode обычно просто оставляет отладочную информацию в файлах.o
. Когда приходит время.dSYM
двоичный файл, обычно создается файл.dSYM
, который помещает всю информацию отладки в одно место. Статическая библиотека (архив ranlib) представляет собой набор файлов.o
. В двоичном файле, который ссылается на.a
lib, будет скопирована вся использованная отладочная информация в его.dSYM
. Итак - ищите.dSYM
. И попробуйте расширить.a
lib (ar x libname.a
и поискать в.o
файлах с помощьюdwarfdump
.