38

在使用 Visual Studio 2005(版本 8.0.50727.762)进行长时间编译期间,有时在某些项目的多个文件中会出现以下错误:

fatal error C1033: cannot open program database 'v:\temp\apprtctest\win32\release\vc80.pdb'

(提到的文件要么在项目的临时目录中,vc80.pdb要么vc80.idb在项目的临时目录中。)

同一项目的下一次构建成功。没有其他可以访问相同文件的 Visual Studio 打开。

这是一个严重的问题,因为它使夜间编译变得不可能。

4

13 回答 13

23

我们在我的网站上也看到了很多。根据我们的设置,来自 Peter Kaufmann 的解释似乎是最合理的:

在 Visual Studio 2005 中构建解决方案时,您会收到诸如致命错误 C1033:无法打开程序数据库“xxx\debug\vc80.pdb”之类的错误。但是,当第二次运行构建时,它通常会成功。

原因:解决方案中的两个项目可能会将它们的输出写入同一目录(例如,'xxx\debug')。如果工具 - 选项、项目和解决方案 - Bild 和 Run 中的最大并行项目构建数设置设置为大于 1 的值,这意味着两个编译器线程可能会尝试同时访问相同的文件,从而产生一个文件共享冲突。解决方案:检查您的项目设置并确保没有两个项目使用相同的目录来存储输出、目标或任何类型的中间文件。或者将最大并行项目构建数设置为 1 以快速解决问题。我在使用 CLAPACK 库附带的 VS 项目文件时遇到了这个问题。更新: Tortoise SVN 有可能访问“vc80.pdb”,即使文件不受版本控制,这也可能导致上述错误(感谢 Liana 报告此问题)。但是,我无法确认这一点,因为在确保所有项目都使用不同的输出目录后,我无法重现该问题。

于 2008-09-24T13:25:25.343 回答
23

可能是防病毒软件或类似程序在写入时接触了 pdb 文件 - 在这种情况下,防病毒软件最有可能是可疑的。恐怕我只能根据我过去在我们商店设置夜间构建的经验给你一些一般性的指导。其中一些可能听起来微不足道,但为了完整起见,我将它们包括在内。

  • 首先也是最重要的:确保你从一张白纸开始。也就是说,在开始 nightly 之前强制删除构建的输出目录。
  • 如果您的夜间机器上有防病毒、反间谍软件或其他此类程序,请考虑将其删除。如果这不是一个选项,请将您的 obj 文件夹添加到程序的排除列表中。
  • (可选)考虑使用 VCBuild 或 MSBuild 等工具作为夜间活动的一部分。如果您在多核机器上,我认为使用 MSBuild 会更好。我们将 IncrediBuild 用于 nightlies,将 MSBuild 用于发布,从未遇到您描述的问题。

如果没有其他工作,您可以在构建开始几个小时后安排一个看门狗脚本并检查其状态;如果构建失败,看门狗应该重新启动它。这是一个丑陋的黑客,但总比没有好。

于 2008-09-24T13:26:11.067 回答
10

将调试信息切换为 C7 格式,而不是使用 PDB。

Project Options -> C/C++ -> General -> Debug Information Format并将其设置为C7

于 2013-08-18T08:01:41.773 回答
6

这通常发生在您之前的调试尝试没有完全杀死调试器时。在任务管理器中查找名为 vcjit 的进程,将其杀死并重试。最坏的选择重新启动 Visual Studio,这应该可以解决您的问题。

于 2008-09-25T10:57:19.777 回答
1

我今天遇到了这个问题,结果证明是导致它的 pdb 路径中的非 ansi 字符。

我通过 vmware 使用 Windows,我的项目位于共享位置:\vmware-host\Shared Folders\project

当我将它移到 \Users\julian\project 时,它解决了这个问题。

于 2010-11-23T12:33:57.860 回答
1

尝试右键单击VS的可执行文件....和属性->兼容性->勾选“以兼容模式运行此程序:”关闭........

于 2011-05-05T01:51:44.187 回答
1

在处理我位于 Dropbox 文件夹中的项目时,我遇到了类似的问题。我发现当系统托盘中的 Dropbox 图标上出现“同步”小图标时,它会抛出此错误,因为 Dropbox 正在访问文件以将它们上传到他们的服务器。当我等到 Dropbox 完成同步后再构建时,它每次都能正常工作。

于 2014-03-21T16:02:53.917 回答
1

我刚刚遇到了这个问题。Visual Studio 抱怨无法打开vc100.pdb。我查找了该文件的打开文件句柄procexp,发现该进程mspdbsrv有一个打开的文件句柄。杀死这个过程解决了这个问题,我能够编译。

于 2015-02-09T17:31:47.963 回答
0

你在使用 LinqToSql 吗?也许它类似于我在这个问题中偶尔会遇到的奇怪错误:是什么导致 Visual Studio 无法正确加载程序集?

于 2008-10-13T22:53:23.140 回答
0

我将中间目录从:

%TEMP%\$(ProjectName)\$(Platform)\$(Configuration)\

C:\temp\$(ProjectName)\$(Platform)\$(Configuration)\

现在可以了。不知道为什么。

于 2013-10-30T08:04:09.207 回答
0

我有同样的问题 C1033: cannot open program database

设想

我有两个 dll 的parent.dllchild.dll。我刚刚将 child.dll 项目附加到 Visual Studio 调试器中,同时我试图构建 parent.dll 项目,产生错误 C1033: cannot open program database

解决方案

停止调试并终止调试器附带的进程。重建项目

于 2016-04-29T05:31:39.897 回答
0

如果我Ctrl+Break取消构建(vs2015),这种情况一直发生在我身上。有一些进程没有正确关闭。我进行了狂暴的“结束任务” ms/vs 相关进程(查找重复项),我的构建再次工作。重新启动可能也会起作用。就像迁移到 gnu binutils 一样。

令人讨厌的解锁工具不会报告任何锁定文件的进程,Windows 不允许我删除它,.pdb但我可以重命名它。我的猜测是在构建期间两个进程同时跳入。

于 2017-03-24T21:59:05.867 回答
0

就我而言,问题出在 Google Drive:我忘记了该项目位于同步文件夹下,而 G Drive 可能锁定了该文件。暂停同步没有帮助,因为无论如何都会抛出错误。

将项目文件夹移动到 Google Drive 未同步的另一个位置解决了我的问题。

顺便提一下,一开始我以为是我的防病毒软件,因为当使用procexp它检查文件时,显示该文件已被我的一个防病毒程序使用。从我的防病毒扫描中排除文件夹项目对我没有帮助。

于 2021-11-04T00:02:41.653 回答