cmake使用macos上的makefile生成器创建的<target> .dSYM目录中有什么?

Eri*_*ler 4 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
Run Code Online (Sandbox Code Playgroud)

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

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

小智 5

默认情况下,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(如果它是为适当的达尔文目标而构建的).