编译随机失败:“无法打开程序数据库”

时间:2008-09-24 12:15:11

标签: c++ visual-studio visual-studio-2005 compiler-errors nightly-build

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

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

(项目的临时目录中提到的文件是vc80.pdbvc80.idb。)

同一项目的下一个版本成功。没有其他Visual Studio打开可能访问相同的文件。

这是一个严重的问题,因为它无法进行夜间编译。

12 个答案:

答案 0 :(得分:21)

我们在我的网站上也看到过这么多。根据我们的设置,来自Peter Kaufmann的This explanation似乎是最合理的:

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

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

答案 1 :(得分:21)

防病毒或类似程序有可能在写入时触及pdb文件 - 在这种情况下,防病毒是最可能的嫌疑人。根据我过去在我们店里设置夜间建筑的经验,我担心我只能给你一些一般性的指示。其中一些可能听起来微不足道,但为了完成,我将它们包括在内。

  • 首先:确保你从干净的石板开始。也就是说,在每晚开始之前强制删除构建的输出目录。
  • 如果您的夜间计算机上有防病毒软件,反间谍软件或其他此类程序,请考虑将其删除。如果这不是一个选项,请将您的obj文件夹添加到该程序的排除列表中。
  • (可选)考虑使用VCBuild或MSBuild等工具作为夜间的一部分。如果您使用的是多核计算机,我认为最好使用MSBuild。我们将IncrediBuild用于nightlies和MSBuild用于发行版,并且从未遇到过您描述的问题。

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

答案 2 :(得分:8)

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

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

答案 3 :(得分:6)

当您之前的调试尝试没有完全杀死调试器时,通常会发生这种情况。 在任务管理器中查找名为vcjit的进程,将其杀死并重试。 最糟糕的选项重启visual studio,这应该可以解决你的问题。

答案 4 :(得分:1)

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

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

当我将其移至\ Users \ julian \ project时,它解决了问题。

答案 5 :(得分:1)

尝试右键单击VS ....和Properties-> Compatibility->的可执行文件。勾选“在兼容模式下运行此程序:”OFF ........

答案 6 :(得分:1)

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

答案 7 :(得分:1)

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

答案 8 :(得分:0)

你在使用LinqToSql吗?也许它类似于我在这个问题中偶尔会遇到的奇怪错误:What causes Visual Studio to fail to load an assembly incorrectly?

答案 9 :(得分:0)

我改变了我的中间目录:

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

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

现在有效。不知道为什么。

答案 10 :(得分:0)

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

<强>方案

我有两个dll的 parent.dll child.dll 。我刚刚使用visual studio调试器连接了child.dll项目尝试构建parent.dll项目,产生错误C1033: cannot open program database

<强>解决方案

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

答案 11 :(得分:0)

如果我 Ctrl + Break 取消构建(vs2015),这种情况一直发生在我身上。有些过程没有正常关闭。我进行了横冲直撞&#34; End Tasking&#34; ms / vs相关进程(查找重复项),我的构建再次起作用。重启可能也会起作用。就像转向gnu binutils一样。

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