我的OSX应用程序有几个依赖库,使用-g
clang标志编译,以保留源级调试符号。
Xcode项目设置Strip Debug Symbols During Copy
设置为YES
,Debug Information Format
设置为DWARF with dSYM
。
但是,每当我读取符号化崩溃报告时,应用程序级别的回溯框架都会被正确地符号化,但库级别的框架只是内存地址。这让我觉得Xcode没有放置依赖关系'将符号数据转换为dSYM包。如何解决这个问题?
答案 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包,可以用于正确的崩溃报告符号。