1

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

但是,每当我阅读符号化的崩溃报告时,应用程序级别的回溯帧都是正确符号化的,但库级别的帧只是内存地址。这让我觉得 Xcode 没有将依赖项的符号数据放入 dSYM 包中。怎么能解决这个问题?

4

1 回答 1

0

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

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

log="/tmp/${FULL_PRODUCT_NAME}-release.log"
echo "********* 将依赖项 dSYM 添加到存档中..." > $log
函数 copyLibDsym()
{
    本地库=$1
    本地 libfile=$(basename $lib)
    本地 libname="${libfile%.*}"
    echo "从 ${libname} 中提取 dSYM 到 ${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"

复制LibDsym $ndnrtclib
复制LibDsym $ndncpplib
复制LibDsym $discoverylib
复制LibDsym $chatlib

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

于 2015-07-30T19:15:11.693 回答