【问题标题】:What is in the <target>.dSYM directories created by cmake with the makefile generator on macos?cmake 使用 macos 上的 makefile 生成器创建的 <target>.dSYM 目录中有什么?
【发布时间】:2019-01-08 08:14:52
【问题描述】:

我在 MacOS 上使用 CMake 为我的 C++ 项目生成 Makefile。当我构建一个目标(例如,test/AsyncTest)时,我得到了该目标,以及一个包含以下内容的 test/AsyncTest.dSYM/ 目录:

test/AsyncTest.dSYM/Contents/Resources/DWARF/AsyncTest
test/AsyncTest.dSYM/Contents/Info.plist

我猜这是调试信息(基于“.dSYM”和“DWARF”线索),但我还没有找到可以让我检查 AsyncTest 文件的工具。 dwarfdump 不认识它。

那么,究竟是什么文件?有没有我可以用来转储符号信息的工具(假设就是这样)?当我没有要求时,为什么 CMake 会生成它?我可以生成它吗(因为生成的文件是huuuuge)?

【问题讨论】:

标签: cmake dwarf dsym


【解决方案1】:

macOS / OS X / Darwin / Mach-O 对象默认具有“分离调试”方案。

链接 exe 时,静态链接器 (ld64) 不包含 exe 中的调试数据。

但是,静态链接器记录(在 exe 符号表中)它链接的目标文件的名称

第二个工具(调试链接器,名为 dsymutil)使用 exe 文件表和原始对象并链接调试 - 生成包含链接调试的标准 mach-o 包结构。 [默认为 name.dSYM] 其中“name”是 exe 的名称。

LLDB 和某些版本的 GDB 可以使用这个包来提供他们需要的调试数据。

看内容:

Xcode “dwarfdump” 实用程序可以理解包(dwarfdump name.dSYM)。

实际内容: name.dSYM/Contents/Resources/DWARF/name 也应该可以通过以下方式转储:

  • llvm-dwarfdump
  • BINUTILS objdump(如果它是为适当的 darwin 目标构建的)。

【讨论】:

  • 谢谢,llvm-dwarfdump 是我一直在寻找的魔法酱。 vanilla gnu dwarfdump 无法识别这些 DWARF 文件的格式,但 llvm-dwarfdump 可以。
【解决方案2】:

我不知道里面到底有什么,但它与调试有关,而不是 cmake 的错:“c++ -g test.cpp -o test”也会生成它。

据我所知,关闭它的唯一方法是不在调试模式下编译:将 -DCMAKE_BUILD_TYPE=Release 传递给 cmake。

【讨论】:

    猜你喜欢
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    相关资源
    最近更新 更多