当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《编译随机失败:"无法打开程序数据库"》经验,为你挑选了4个好方法。

在使用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打开可能访问相同的文件.

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



1> SCFrench..:

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

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

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


只是想说我之前看过这个错误并将并行构建的数量设置为1为我修复它...虽然显然,OP经历了不同的事情.

2> Laur..:

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

首要的是:确保你从干净的石板开始.也就是说,在开始每晚之前强制删除构建的输出目录.

如果您的夜间计算机上有防病毒软件,反间谍软件或其他此类程序,请考虑将其删除.如果这不是一个选项,请将您的obj文件夹添加到该程序的排除列表中.

(可选)考虑使用VCBuild或MSBuild等工具作为夜间的一部分.如果您使用的是多核计算机,我认为最好使用MSBuild.我们使用IncrediBuild用于nightlies和MSBuild用于发行版,并且从未遇到过您描述的问题.

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



3> 小智..:

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

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



4> 小智..:

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

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有