2017-01-17 20 views
12

У меня есть фреймворк с dylib в моем приложении iOS, который был скомпилирован на другой машине. Я проверил источники на моей машине и попытался инструктажем lldb отобразить путь исходного кода с помощью:Присоединение источников к двоичному dylib в Xcode

settings set target.source-map /source/code/path/in/dylib/prefix /source/code/path/on/my/machine/prefix 

без толка, все еще видя сборку.

Примечание № 1: dylib был скомпилирован из кода C++ в той же версии Xcode.

Примечание № 2: Я использую nm -pa /path/to/dylib, чтобы определить, включены ли пути к файлам в отладочную информацию, и они, по какой-то причине, не работают по lldb.

Благодаря

UPDATE

Я следовал ответ Джима Инг в ниже и создал скрипт, который автоматизирует этот скрипт доступен как ссылка GIST в этой статье я писал: https://medium.com/@maxraskin/background-1b4b6a9c65be

ответ

4

Чтобы отлаживать код, построенный на одном компьютере, но отлаживаемый на другом, вам нужно создать dSYM и иметь доступное на компьютере, на котором вы отлаживаете. Если вы этого не сделали, ничего не получится.

Следующее, что нужно проверить, это то, что lldb собирает dSYM. Эта страница содержит описание того, как работает этот процесс:

http://lldb.llvm.org/symbols.html

, но если все остальное терпит неудачу, вы можете использовать команду add-dsym добавить его вручную.

Если это все еще не закрепил ваша проблема, а затем выбрать некоторый символ в вашем dylib и сделать:

(lldb) image lookup -vn <SYMBOL_NAME> 

или попеременно найти адрес в загруженном dylib и сделать:

(lldb) image lookup -va <ADDRESS> 

Если lldb нашел dSYM и информация об отладке верна, одна из строк вывода должна быть записью для «Компиляционного блока». Это то, что сообщает информация об отладке, путь к исходному файлу. Соответствующая база этого пути - это то, что вы должны использовать в target.source-map. Если вы не видите эту запись, тогда отладочная информация для этого модуля компиляции каким-то образом теряется.

Если все эти вещи выглядят хорошо, а lldb все еще не видит исходные файлы, тогда вы, скорее всего, попадете в ошибку, и в этом случае, пожалуйста, напишите ошибку с http://bugreporter.apple.com.

+0

Спасибо за подробный ответ, который сработал, мне действительно не хватало dSYM. Я использовал 'add-dsym' и указал путь dSYM, затем я использовал' look look--vn 'для получения пути исходного кода символа, а затем изменил отображение, используя' settings set target.source-map/path/prefix/i/got/from/lookup/path/prefix/on/my/machine'. –

+0

Чтобы автоматизировать это, я буду использовать инструкции из http://lldb.llvm.org/symbols.html. –

+0

btw - для отладочных сборников dylib, требуется ли dSYM или те же данные, встроенные в файл-карлик? –