【问题标题】:Windows executables with complete embedded debug symbols?具有完整嵌入式调试符号的 Windows 可执行文件?
【发布时间】:2017-08-17 21:30:22
【问题描述】:

在某些情况下,Windows 可执行文件(使用 Visual Studio 用 C++ 编写)可以包含其完整的调试符号?还是仅包含在其 .pdb 文件中的全套调试符号?

有没有办法配置构建 Windows 应用程序,以便我们可以在没有 .pdb 文件的情况下对其进行调试?

【问题讨论】:

  • 如何配置构建 Windows 应用程序,毫不奇怪,取决于您的构建工具。您是否使用 Microsoft C++ 编译器和link.exe? .NET 编译器,例如 csc.exe?经典的VB?弗兰克?德尔福?来自其他供应商(例如 Intel 或 GCC 或 clang)的 C++ 编译器?没有每个工具链都认可的神奇选项。
  • 我已经阐明了应用程序是如何编写的。
  • 其实我没有。所以我想我的问题的答案是肯定的。
  • 哦,你可以用/Z7把它放到一个obj或lib中,但它仍然不会嵌入到exe中:(

标签: windows symbols dbghelp


【解决方案1】:

来自the documentation for your toolchain

编译器的 C7 兼容 (/Z7) 选项导致编译器将调试信息保留在 .obj 文件中。您还可以使用程序数据库 (/Zi) 编译器选项将调试信息存储在 .obj 文件的 PDB 中。链接器首先在 .obj 文件中写入的绝对路径中查找对象的 PDB,然后在包含 .obj 文件的目录中查找。您不能为链接器指定对象的 PDB 文件名或位置。

无法创建包含调试信息的 .exe 或 .dll。调试信息始终放在 .obj 或 .pdb 文件中。

这不排除其他工具将调试信息放入 EXE 文件的一部分...但 Microsoft Visual Studio 的 C++ 工具从不这样做。

有关将调试信息放入 OBJ 文件(可能包含在 LIB 静态库中)而不是 PDB 的信息,请阅读 the documentation on the compiler option for Debug Information Format

【讨论】:

    猜你喜欢
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 2018-01-31
    • 2011-09-03
    • 2019-11-22
    • 1970-01-01
    • 2017-05-12
    相关资源
    最近更新 更多