2015-07-29 4 views
1

В моем приложении OSX есть несколько библиотек зависимостей, которые были скомпилированы с флагом clang -g, чтобы сохранить символы отладки исходного уровня. Настройки проекта Xcode имеют Strip Debug Symbols During Copy для YES и Debug Information Format для DWARF with dSYM.Обозначает ли Xcode символы отладки для зависимостей (OSX) и помещает их в .dSYM?

Однако, всякий раз, когда я читаю символический отчет о сбое, кадры обратного хода на уровне приложения правильно обозначаются, а фреймы на уровне библиотеки - это только адреса памяти. Это заставляет меня думать, что Xcode не помещал данные символов зависимостей в пакет dSYM. Как можно это исправить?

ответ

0

Я выяснил проблему. Следует использовать dsymutil для извлечения пакета dSYM из произвольного двоичного кода, скомпилированного с помощью символов исходного кода (-g флаг для clang на OSX).

Я написал этот скрипт для автоматического извлечения dSYMs из моих зависимостей и поместить их в архив и добавить его к Post-build action на Archive стадий в конфигурации проекта:

 
log="/tmp/${FULL_PRODUCT_NAME}-release.log" 
echo "********* Adding dependencies dSYMs into the archive..." > $log 
function copyLibDsym() 
{ 
    local lib=$1 
    local libfile=$(basename $lib) 
    local libname="${libfile%.*}" 
    echo "extracting dSYMs from ${libname} to ${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 пакеты, которые могут использоваться для обозначения символики аварийных сообщений.