我在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 )?
答案 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也应该通过以下方式转储:
答案 1 :(得分:-1)
我不确切知道其中有什么,但是它与调试完全无关,不是cmake的错:“ c ++ -g test.cpp -o test”也会生成它。
我知道的唯一将其关闭的方法是不以调试模式进行编译:通过-DCMAKE_BUILD_TYPE =发布给cmake。