【问题标题】:Are .pdbs required for .lib (static libraries) or are the dll/exe pdbs enough?.lib(静态库)是否需要 .pdbs 或者 dll/exe pdbs 是否足够?
【发布时间】:2019-01-23 14:07:54
【问题描述】:

我大致知道,当从 .exe 静态链接到 .lib 时,代码被放置在 .exe 中(当然缺少一些细节)。

但是当从 WinDbg 之类的东西获取堆栈跟踪时,我是否需要为 exe 和 lib 提供一个 pdb,或者 exe 的 pdb 是否包含来自 pdb 的 lib 信息(以相同的方式exe包含lib)?

我问是因为在使用 MSVC 调试构建(使用 CMake)中,我为我的 .libs、.ddls、.exes 获取 pdb,但在发布时我只能为 .dlls 和 .exes 获取 pdb

【问题讨论】:

  • 如果 lib 文件是静态链接的,那么您可能需要 PDB 文件。如果它们只是用于链接器和 DLL,那么它们就毫无意义并且永远不会生成,这些 LIB 只是 ar 存档,存储所有导出的函数名称。
  • EXE 就足够了,静态库的 pdb 条目被合并到其中。只要您不使用 /DEBUG:FASTLINK 链接器选项。

标签: windows visual-studio


【解决方案1】:

检查this 答案。有编译选项。

如果您使用 /ZI 或 /Zi(C/C++ -> 常规 -> 调试信息格式),则会创建 vc$(PlatformToolsetVersion).pdb,其中包含所有创建的 .obj 文件的调试信息.如果交替使用 /Z7,调试信息将嵌入到 .obj 文件中,然后嵌入到 .lib 中。这可能是为静态库分发调试信息的最简单方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2016-12-05
    • 2019-09-30
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多