Xcode是否剥离了依赖项(OSX)的调试符号并将它们放入.dSYM?

时间:2015-07-29 03:38:42

标签: c++ xcode macos libraries dsym

我的OSX应用程序有几个依赖库,使用-g clang标志编译,以保留源级调试符号。 Xcode项目设置Strip Debug Symbols During Copy设置为YESDebug Information Format设置为DWARF with dSYM

但是,每当我读取符号化崩溃报告时,应用程序级别的回溯框架都会被正确地符号化,但库级别的框架只是内存地址。这让我觉得Xcode没有放置依赖关系'将符号数据转换为dSYM包。如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我已经找到了问题所在。 应该使用dsymutil从使用源级符号(OSX上的-g的{​​{1}}标志)编译的任意二进制文件中提取dSYM包。

我编写了这个脚本来自动从我的依赖项中提取dSYM并将它们放入Archive中并将其添加到项目配置中clang阶段的Post-build action

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

Archive的dSYMs文件夹现在有几个.dSYM包,可以用于正确的崩溃报告符号。