我的 OSX 应用程序有几个使用-g
clang 标志编译的依赖库,以保留源级调试符号。Xcode 项目设置已Strip Debug Symbols During Copy
设置为YES
并Debug Information Format
设置为DWARF with dSYM
.
但是,每当我阅读符号化的崩溃报告时,应用程序级别的回溯帧都是正确符号化的,但库级别的帧只是内存地址。这让我觉得 Xcode 没有将依赖项的符号数据放入 dSYM 包中。怎么能解决这个问题?
我已经弄清楚了问题所在。应该使用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 包,可用于正确的崩溃报告符号。