我的 OSX 应用程序有几个依赖库,它们是用 -g
clang 标志编译的,以保留源代码级调试符号。
Xcode 项目设置将 Strip Debug Symbols During Copy
设置为 YES
并将 Debug Information Format
设置为 DWARF with dSYM
。
但是,每当我阅读符号化的崩溃报告时,应用程序级的回溯帧都被正确地符号化,但库级帧只是内存地址。这让我觉得 Xcode 没有将依赖项的符号数据放入 dSYM 包中。如何解决这个问题?
最佳答案
我已经解决了这个问题。
应该使用 dsymutil
从使用源代码级符号编译的任意二进制文件中提取 dSYM 包(-g
标志用于 clang
在 OSX 上)。
我编写了这个脚本来自动从我的依赖项中提取 dSYM 并将它们放入存档并将其添加到项目配置中 Archive
阶段的 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 包,可用于正确的崩溃报告符号化。
关于c++ - Xcode 是否会去除依赖项 (OSX) 的调试符号并将它们放入 .dSYM 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31690824/