我在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。