我在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也应该可以通过以下方式转储:
| 归档时间: |
|
| 查看次数: |
431 次 |
| 最近记录: |