在Mac OS上由cmake使用makefile生成器创建的<target> .dSYM目录中是什么?

时间:2018-07-31 20:40:00

标签: cmake dwarf dsym

我在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 )?

2 个答案:

答案 0 :(得分:5)

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

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

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

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

LLDB和某些版本的GDB可以使用此软件包来提供所需的调试数据。

查看内容:

Xcode的“ dwarfdump”实用程序可以理解该软件包(dwarfdump名称为dSYM)。

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

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

答案 1 :(得分:-1)

我不确切知道其中有什么,但是它与调试完全无关,不是cmake的错:“ c ++ -g test.cpp -o test”也会生成它。

我知道的唯一将其关闭的方法是不以调试模式进行编译:通过-DCMAKE_BUILD_TYPE =发布给cmake。