cmake 使用 macOS 上的 makefile 生成器创建的 <target>.dSYM 目录中有什么?
What is in the <target>.dSYM directories created by cmake with the makefile generator on macos?
我在 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)?
我不知道里面到底有什么,但它肯定与调试相关,而不是 cmake 的错:"c++ -g test.cpp -o test" 也会生成它。
我知道关闭它的唯一方法是不在调试模式下编译:将 -DCMAKE_BUILD_TYPE=Release 传递给 cmake。
macOS / OS X / Darwin / Mach-O objects 默认有一个 "separated debug" 方案。
链接 exe 时,静态链接器 (ld64) 不包含 exe 中的调试数据。
但是,静态链接器记录(在 exe 符号中 table)它链接的目标文件的名称
第二个工具(调试链接器,名为 dsymutil)使用 exe 文件 table 和原始对象并链接调试 - 生成包含链接调试的标准 mach-o 包结构。 [默认 name.dSYM] 其中 "name" 是 exe 的名称。
LLDB 和某些版本的 GDB 可以使用这个包来提供他们需要的调试数据。
看内容:
Xcode “dwarfdump” 实用程序可以理解包 (dwarfdump name.dSYM)。
实际内容:
name.dSYM/Contents/Resources/DWARF/name 也应该可以被转储:
- llvm-dwarfdump
- BINUTILS objdump(如果它是为适当的 darwin 目标构建的)。
我在 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)?
我不知道里面到底有什么,但它肯定与调试相关,而不是 cmake 的错:"c++ -g test.cpp -o test" 也会生成它。
我知道关闭它的唯一方法是不在调试模式下编译:将 -DCMAKE_BUILD_TYPE=Release 传递给 cmake。
macOS / OS X / Darwin / Mach-O objects 默认有一个 "separated debug" 方案。
链接 exe 时,静态链接器 (ld64) 不包含 exe 中的调试数据。
但是,静态链接器记录(在 exe 符号中 table)它链接的目标文件的名称
第二个工具(调试链接器,名为 dsymutil)使用 exe 文件 table 和原始对象并链接调试 - 生成包含链接调试的标准 mach-o 包结构。 [默认 name.dSYM] 其中 "name" 是 exe 的名称。
LLDB 和某些版本的 GDB 可以使用这个包来提供他们需要的调试数据。
看内容:
Xcode “dwarfdump” 实用程序可以理解包 (dwarfdump name.dSYM)。
实际内容: name.dSYM/Contents/Resources/DWARF/name 也应该可以被转储:
- llvm-dwarfdump
- BINUTILS objdump(如果它是为适当的 darwin 目标构建的)。