Удаляет ли Xcode символы отладки для зависимостей (OSX) и помещает ли их в .dSYM?

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

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


person peetonn    schedule 29.07.2015    source источник


Ответы (1)


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

Я написал этот скрипт для автоматического извлечения dSYM из моих зависимостей и помещения их в архив, а также добавил его на 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, которые можно использовать для правильной символизации отчетов о сбоях.

person peetonn    schedule 30.07.2015