c++ - Xcode 是否会去除依赖项 (OSX) 的调试符号并将它们放入 .dSYM 中?

标签 c++ xcode macos libraries dsym

我的 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/

相关文章:

c++ - 使用 const 参数的函数重载

c++ - 如何在 C++ 中将字符串与 const 字符串进行比较

r - mac上的扭曲线(带有非实线型)ggplot

c++ - 如何调用C++函数?

c++ - 调用空类方法会影响性能吗?

ios - ViewController 在 iOS Simulator swift 中显示为空

json - alamofire 解析嵌套的 json

xcode - IOS模拟器老是崩溃?

macos - Cocoa OSX 在拖动操作期间设置光标

python - 如何在使用 GPU 支持编译的 macOS 上安装 Xgboost?