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



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

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

我猜这是调试信息(基于".dSYM"one_answers"DWARF"线索(,但我还没有找到可以检查AsyncTest文件的工具。dwarfdump无法识别。

那么,这个文件到底是什么?有没有一个工具可以用来转储符号信息(假设就是这样(?为什么CMake在我没有要求的情况下生成它?我是否可以不生成它(因为生成的文件是huuuuge(?

macOS/OS X/Darwin/Mach-O对象默认情况下具有"分离调试"方案。

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

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

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

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

查看内容:

Xcode"侏儒转储"实用程序可以理解包(侏儒转储名称.dSYM(。

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

  • llvm侏儒转储
  • BINUTILS objdump(如果它是为适当的达尔文目标构建的(

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

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

最新更新