在 Visual Studio 10 中带有库的 PDB 文件

Posted

技术标签:

【中文标题】在 Visual Studio 10 中带有库的 PDB 文件【英文标题】:PDB files with Libraries in Visual Studio 10 【发布时间】:2013-06-11 19:43:18 【问题描述】:

在 MS Visual Studio 10 中使用调试信息构建静态库 (.LIB) 时, .PDB 始终命名为 vc100.pdb(与构建 .DLL 不同,其中调试信息为 [MyProjectName].pdb

这对我来说是个问题,因为我试图将几个不同的库(及其调试符号)复制到 "PublishedLibraries" 的目录中,但所有 vc100.pdb 的名称显然会发生冲突。

我确信我可以更改每个 .PDB 的名称以匹配其 .LIB,但对我来说更大的问题是 为什么 Visual Studio 认为 vc100.pdb 是一个更好的名称比projectA.pdb??如果所有名称都冲突,我们打算如何处理来自多个库的调试信息?

【问题讨论】:

err,你如何直接调试.lib? IMO,如果您将其构建到 DLL 或 exe 中,则 .pdb 将拥有调试所需的一切。 如果我将多个库(和一些其他代码)构建到一个可执行文件中,那么该可执行文件不需要来自各种vc100.pdb 文件的信息吗?如果它们都具有相同的冲突名称,它如何读取它们? 它是“程序数据库”,它包含依赖信息。将其留在生成的位置。在将静态库链接到可执行文件之前,不会生成您需要的 PDB。 @HansPassant :您是说调试信息(否则我希望在.PDB 中找到)在.LIB 文件中? @abelenky:通常的设置将它们放在不同的目录中,因此不会发生冲突。只要最终结果有效,我就不确定它是如何完成的;-) 【参考方案1】:

如果您使用 /Z7(而不是 /ZI 或 /Zi)[在 UI C/C++ -> 常规 -> 调试信息格式中],则调试信息嵌入在 lib 文件本身中,而不是单独的 pdb ,这意味着您不必担心同名。

当您构建最终的可执行文件(.exe 或 .dll)时,您将从所有小的嵌入式 pdb 中获得一个合并的 pdb。

查看this question了解更多信息

这是我一直在团队中处理此问题的方式,因为您不会在构建过程中丢失调试信息。它使库有些膨胀[但总共不超过同时拥有 lib 和 pdb],但由于您可能不发布库,因此您不必为此担心太多。

【讨论】:

以上是关于在 Visual Studio 10 中带有库的 PDB 文件的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Visual Studio 2005 上运行使用 Oracle 库的应用程序

Visual Studio代码launch.json runtimeArgs在参数中带有双引号

Visual Studio 2010 中带有 plsql 的 C# [关闭]

Visual Studio 2013 中带有 EF6 的 MySQL 连接器

Visual Studio [不是代码] 2019 中带有 TypeScript 和 Node(或 ESM)模块的 ASP.NET 5(核心)网站?

在 Mvc 5、EF6、Visual Studio 2013 中使用存储库的脚手架控制器