objcopy和dsymutil有什么区别?

时间:2015-10-19 12:34:14

标签: gcc gdb clang lldb debug-symbols

Linux上有这两个命令:

objcopy --only-keep-debug foo foo.dbg
objcopy --add-gnu-debuglink=foo.dbg foo

相当于下面的mac

dsymutil <binary> -o <binary>.dSYM

等同于

  1. 它创建一个独立的调试信息文件。
  2. 它在可执行文件和调试信息文件之间创建了一个链接。
  3. 然后剥离

    是linux上的命令:

    objcopy --strip-debug foo
    

    OR

    strip -g <binary>
    

    相当于下面的mac

    strip -S <binary>
    

1 个答案:

答案 0 :(得分:4)

objcopy的--only-keep-debug部分在功能上与dsymutil相同。

没有任何工具可以在dSYM中记录二进制位置。相反,dSYM&amp;二进制文件共享一个公共UUID,想要查找符号文件的客户端使用DebugSymbols框架,该框架使用各种技巧(例如Spotlight导入器,搜索路径,&#34; dSYM查找外部脚本&#34;等)来查找单独的调试文件。因此,不需要等同于--add-gnu-debuglink

strip -S的mac版本确实剥离调试信息的方式与binutils版本相同。不同之处在于OS X上的strip -S实际上并没有太大地减小二进制文件的大小。在OS X上,调试信息始终不在可执行文件中 - 驻留在.o文件或dSYM中。可执行文件只有一个小的调试映射&#34;告诉lldb或dsymutil如何链接.o文件中的矮人。 strip -S只需删除调试映射。