代码之家  ›  专栏  ›  技术社区  ›  Eric Niebler

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

  •  4
  • Eric Niebler  · 技术社区  · 6 年前

    我在MaCOS上使用CMADE为我的C++项目生成MaCube文件。当我建立一个目标(比如, test/AsyncTest ),我找到目标,加上 test/AsyncTest.dSYM/ 包含以下内容的目录:

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

    我猜这是调试信息(基于“.dSYM”和“DWARF”线索),但我还没有找到一个工具来检查异步测试文件。 dwarfdump 不认识它。

    那么,什么 确切地 这是文件吗?有没有一个工具可以用来转储符号信息(假设是这样的话)?为什么我没有要求CMake生成它?我能不能 生成它(因为生成的文件是 呼格 )?

    2 回复  |  直到 6 年前
        1
  •  5
  •   iains    6 年前

    默认情况下,macOS/OS X/Darwin/Mach-O对象有一个“分离调试”方案。

    链接exe时,静态链接器(ld64)不在exe中包含调试数据。

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

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

    LLDB和GDB的一些版本可以使用这个包来提供他们需要的调试数据。

    查看内容:

    Xcode-dwarfdump实用程序可以理解包(dwarfdump name.dSYM)。

    实际内容: name.dSYM/Contents/Resources/DWARF/name也应可由以下人员转储:

    • llvm矮化泵
    • BINUTILS objdump(如果它是为适当的达尔文目标构建的)。
        2
  •  -1
  •   crmoore    6 年前

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

    我知道关闭它的唯一方法是不要在调试模式下编译:pass-DCMAKE_BUILD_TYPE=Release to cmake。