English 中文(简体)
编译随机失败:“无法打开程序数据库”
原标题:
  • 时间:2008-09-24 12:15:11
  •  标签:

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

fatal error C1033: cannot open program database  v:	empapprtctestwin32
eleasevc80.pdb 

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

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

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

最佳回答

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

  • First and foremost: make sure you start up with a clean slate. That is, force-delete the output directory of the build before you start your nightly.
  • If you have an antivirus, antispyware or other such programs on your nightly machine, consider removing them. If that s not an option, add your obj folder to the exclusion list of the program.
  • (optional) Consider using tools such as VCBuild or MSBuild as part of your nightly. I think it s better to use MSBuild if you re on a multicore machine. We use IncrediBuild for nightlies and MSBuild for releases, and never encountered the problem you describe.

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

问题回答

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

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

Reason: It s possible that two projects in the solution are writing their outputs to the same directory (e.g. xxxdebug ). If the maximum number of parallel project builds setting in Tools - Options, Projects and Solutions - Bild and Run is set to a value greater than 1, this means that two compiler threads could be trying to access the same files simultaneously, resulting in a file sharing conflict. Solution: Check your project s settings and make sure no two projects are using the same directory for output, target or any kind of intermediate files. Or set the maximum number of parallel project builds setting to 1 for a quick workaround. I experienced this very problem while using the VS project files that came with the CLAPACK library. UPDATE: There is a chance that Tortoise SVN accesses vc80.pdb , even if the file is not under versioning control, which could also result in the error described above (thanks to Liana for reporting this). However, I cannot confirm this, as I couldn t reproduce the problem after making sure different output directories are used for all projects.

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

<code>项目选项->;C/C++->;概述->;调试信息格式并将其设置为C7

This generally happens when your previous attempts at debugging have not killed the debugger fully. In Task manager look for a process called vcjit, kill it and try again. Worst option restart visual studio, this should solve your problem.

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

我通过vmware使用windows,我的项目位于一个共享位置:vmware主机共享文件夹项目

当我把它移到Usersjulianproject时,它解决了这个问题。

我刚遇到这个问题。Visual studio抱怨无法打开vc100.pdb。我使用procexp查找此文件的打开文件句柄,发现进程mspdsrv有一个打开文件句柄。终止此进程解决了问题,我可以编译。

尝试右键单击VS.…和财产的可替换文件->;兼容性->;勾选“在兼容模式下运行此程序:”关闭。。。。。。。。

我在做一个项目时遇到了类似的问题,我在Dropbox文件夹中找到了这个项目。我发现,当系统托盘中的Dropbox图标上出现小的“同步”图标时,它会抛出这个错误,因为Dropbox正在访问文件并将其上传到服务器。当我等待构建直到Dropbox完成同步时,它每次都起作用。

我有同样的问题C1033:无法打开程序数据库

场景

我有两个dllparent.dllchild.dll。我刚刚用visual studio调试器附加了child.dll项目,同时我正在尝试构建parent.dll项目,产生错误C1033:无法打开程序数据库

解决方案

停止调试并终止与调试器连接的进程。重新生成项目

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

令人烦恼的是,解锁工具不会报告任何锁定文件的进程,windows不允许我删除.pdb,但我可以重命名它。我猜在构建过程中会有两个进程同时进入。

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

我将中间目录更改为:

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

C:	emp$(ProjectName)$(Platform)$(Configuration)

它现在起作用了。不知道为什么。

在我的案例中,问题是谷歌硬盘:我忘记了这个项目在一个同步文件夹下,G硬盘可能锁定了那个文件。暂停同步没有帮助,因为错误还是被抛出了。

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

更不用说,一开始我以为这是我的防病毒软件,因为当使用procexp检查文件时,显示该文件被我的一个防病毒程序使用。从防病毒扫描中排除文件夹项目对我的情况没有帮助。

最简单的解决方案是“再构建一次”:

BuildConsole abc.sln /rebuild /cfg="release|Win32"
if %errorlevel% neq 0 (
    BuildConsole abc.sln /cfg="release|Win32"
    if %errorlevel% neq 0 (
        rem process error
        exit 1
    )
)

我刚遇到这个问题,谷歌把我带到了这里。对我来说,这是谷歌硬盘在我尝试运行时同步我的项目文件。暂停Google Drive同步暂时解决了这个问题,但我更希望在Visual Studio做这件事的时候,Google Drive有一种方法可以让它放手。如果有人知道我如何配置,请告诉我





相关问题