Visual C++ PDB 文件的合理大小是多少?

Posted

技术标签:

【中文标题】Visual C++ PDB 文件的合理大小是多少?【英文标题】:What's a reasonable size for a Visual C++ PDB file? 【发布时间】:2010-10-25 14:04:44 【问题描述】:

我正在努力减少大型 Visual C++ 2008 应用程序的构建时间。最严重的瓶颈之一似乎是 PDB 文件的生成:在链接阶段,mspdbsrv.exe 快速消耗可用 RAM,并且构建机器开始不断分页。

我目前的理论是我们的 PDB 文件太大了。但是,我一直无法找到有关 PDB 文件“正常”大小的任何信息。我对我们应用程序中的一个 DLL 进行了一些粗略的测量,如下所示:

CPP 文件:34.5 MB,90 万行 头文件:21 MB,40 万行 编译后的 DLL:33 MB(编译后用于调试,而非发布) PDB:187 MB

因此,PDB 文件大约是 DLL 大小的 570%。 有大型 Visual C++ 应用程序经验的人能否告诉我这些比率和大小是否有意义? 或者这里有迹象表明我们做错了什么?

(我们应用程序中最大的 PDB 文件目前为 271 MB,而 DLL 为 47.5 MB。不过,源代码大小更难衡量。)

谢谢!

【问题讨论】:

【参考方案1】:

是的,.pdb 文件可能非常大 - 即使是您提到的大小。由于 .pdb 文件包含将源代码行映射到机器代码的数据,并且您编译了大量代码,因此 .pdb 文件中有大量数据,您可能无法直接使用这些数据。

您可以尝试的一件事是将程序拆分为更小的部分 - DLL。每个 DLL 都有自己独立的 .pdb。但是我严重怀疑它会减少构建时间。

【讨论】:

谢谢。我确实计划尝试使用更小的 DLL;我希望这将导致更小的 PDB 文件,然后可以在更少的内存中处理,从而减少分页和减少磁盘 I/O。不过,这只是一个假设。【参考方案2】:

您真的总是需要完整的调试信息吗?您可以创建一个包含较少调试信息的配置。

但正如Sharptooth 已经说过的,是时候重构您的程序并将其拆分为更易于维护的小部分了。这不仅会减少构建时间。

【讨论】:

以上是关于Visual C++ PDB 文件的合理大小是多少?的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio C++ 2010 中找不到或打开 PDB 文件

Visual C++ 6.0 中“无符号字符”数组的最大允许大小是多少?

OpenCV 3 Visual Studio 2017 调试,调用堆栈没有 .pdb 文件

Visual C++ 检查进程内存中的对象实例大小[关闭]

并行构建 Visual Studio 解决方案会丢失一些静态库的 PDB

Visual Studio 2019 VS的.pdb文件是什么?(用于调试)