В моем приложении OSX есть несколько библиотек зависимостей, которые были скомпилированы с -g
флаг clang для сохранения отладочных символов исходного уровня.
Настройки проекта XCode имеют Strip Debug Symbols During Copy
установлен в YES
а также Debug Information Format
установлен в DWARF with dSYM
,
Однако всякий раз, когда я читаю символический отчет о сбое, фреймы обратной трассировки на уровне приложения обозначаются правильно, а фреймы на уровне библиотеки — это просто адреса памяти. Это заставляет меня думать, что Xcode не помещал данные символов зависимостей в пакет dSYM. Как можно это исправить?
Я понял проблему.
Надо использовать dsymutil
извлечь пакет dSYM из произвольного двоичного файла, скомпилированного с символами исходного уровня (-g
флаг для clang
на OSX).
Я написал этот скрипт, чтобы автоматически извлекать dSYM из моих зависимостей, помещать их в архив и добавлять в Post-build action
из Archive
этап в конфигурации проекта:
log = "/ tmp / $ {FULL_PRODUCT_NAME} -release.log" echo "********* Добавление зависимостей dSYM в архив ..."> $ log функция copyLibDsym () { локальная библиотека = $ 1 локальный libfile = $ (базовое имя $ lib) local libname = "$ {libfile%. *}" echo ", извлекающий dSYM из $ {libname} в $ {ARCHIVE_DSYMS_PATH} / $ {libname} .dSYM" >> $ log dsymutil "$ lib" -o "$ {ARCHIVE_DSYMS_PATH} / $ {libname} .dSYM"} ndnrtclib = "$ {NDNRTC_LIB_PATH} /libndnrtc.dylib" ndncpplib = "$ {NDNCPP_LIB_PATH} /libndn-cpp.dylib" discoverylib = "$ {NDNCHAT_LIB_PATH} /libentity-discovery.dylib" chatlib = "$ {NDNCHAT_LIB_PATH} / libchrono- chat2013.dylib» copyLibDsym $ ndnrtclib copyLibDsym $ ndncpplib copyLibDsym $ discoverylib copyLibDsym $ chatlib
В папке архива dSYMs теперь есть несколько пакетов .dSYM, которые можно использовать для правильной символизации отчетов о сбоях.