【发布时间】:2015-02-26 01:53:54
【问题描述】:
有没有办法指示 C++ Builder 的链接器在独立文件中输出 DWARF 调试信息(64 位 C++ 应用程序),而不是将其直接注入可执行文件? IE。类似于“将调试信息放在单独的 TDS 文件中”的选项(不适用于 DWARF 调试格式)。
如果没有这样的选项 - 有没有办法从已编译的可执行文件中删除信息?
【问题讨论】:
标签: c++builder dwarf
有没有办法指示 C++ Builder 的链接器在独立文件中输出 DWARF 调试信息(64 位 C++ 应用程序),而不是将其直接注入可执行文件? IE。类似于“将调试信息放在单独的 TDS 文件中”的选项(不适用于 DWARF 调试格式)。
如果没有这样的选项 - 有没有办法从已编译的可执行文件中删除信息?
【问题讨论】:
标签: c++builder dwarf
假设您在使用 GNU Binutils 的平台上,您可以使用 objcopy 将 DWARF 信息提取到单独的文件中作为编译后步骤。如果您愿意,可以使用strip 从可执行二进制文件中删除调试信息。
【讨论】:
要将调试信息放在单独的文件中,请按照以下步骤操作
// Build
$ clang -O2 -g -o hello.full hello.c
// Package hello.stripped is run as "hello" in production environment
$ strip -o hello.stripped hello.full
// Extract debug info to separate file
$ objcopy --only-keep-debug hello.full hello.debug
// Create a section which contains a reference to debug file
$ objcopy --strip-debug --add-gnu-debuglink=hello.debug hello.full hello
// Debug - GDB automatically reads hello.debug
$ gdb hello
. . .
Reading symbols from ./hello...
Reading symbols from /homes/syrajendra/hello.debug...done.
(gdb)
// Core from hello.stripped
$ gdb --core core-file --exec hello
【讨论】: