objcopy 和 dsymutil 有什么区别?
What is difference between objcopy and dsymutil?
这两个命令是在linux:
objcopy --only-keep-debug foo foo.dbg
objcopy --add-gnu-debuglink=foo.dbg foo
相当于下面 mac
dsymutil <binary> -o <binary>.dSYM
在某种意义上等价,
- 它创建一个独立的调试信息文件。
- 它在可执行文件和调试信息文件之间创建一个 link。
然后进行剥离
是linux上的命令:
objcopy --strip-debug foo
或
strip -g <binary>
相当于下面 mac
strip -S <binary>
objcopy 的 --only-keep-debug
部分在功能上与 dsymutil 相同。
没有任何工具可以记录 dSYM 中的二进制位置。相反,dSYM 和二进制文件共享一个通用的 UUID,而想要查找符号文件的客户端使用 DebugSymbols 框架,该框架使用各种技巧(例如 Spotlight 导入器、搜索路径、"dSYM finding external script" 等)来查找单独的符号文件调试文件。所以不需要等同于 --add-gnu-debuglink
。
strip -S
的 mac 版本确实以与 binutils 版本相同的方式去除调试信息。区别在于 OS X 上的 strip -S
实际上不会减少二进制文件的大小。在 OS X 上,调试信息始终保留在可执行文件之外 - 驻留在 .o 文件或 dSYM 中。可执行文件只有一个小的 "debug map" 告诉 lldb 或 dsymutil 如何 link 来自 .o 文件的矮人。 strip -S
只需要删除调试图即可。
这两个命令是在linux:
objcopy --only-keep-debug foo foo.dbg
objcopy --add-gnu-debuglink=foo.dbg foo
相当于下面 mac
dsymutil <binary> -o <binary>.dSYM
在某种意义上等价,
- 它创建一个独立的调试信息文件。
- 它在可执行文件和调试信息文件之间创建一个 link。
然后进行剥离
是linux上的命令:
objcopy --strip-debug foo
或
strip -g <binary>
相当于下面 mac
strip -S <binary>
objcopy 的 --only-keep-debug
部分在功能上与 dsymutil 相同。
没有任何工具可以记录 dSYM 中的二进制位置。相反,dSYM 和二进制文件共享一个通用的 UUID,而想要查找符号文件的客户端使用 DebugSymbols 框架,该框架使用各种技巧(例如 Spotlight 导入器、搜索路径、"dSYM finding external script" 等)来查找单独的符号文件调试文件。所以不需要等同于 --add-gnu-debuglink
。
strip -S
的 mac 版本确实以与 binutils 版本相同的方式去除调试信息。区别在于 OS X 上的 strip -S
实际上不会减少二进制文件的大小。在 OS X 上,调试信息始终保留在可执行文件之外 - 驻留在 .o 文件或 dSYM 中。可执行文件只有一个小的 "debug map" 告诉 lldb 或 dsymutil 如何 link 来自 .o 文件的矮人。 strip -S
只需要删除调试图即可。