views:

3457

answers:

7

During a long compilation with Visual Studio 2005 (version 8.0.50727.762) I sometimes get the following error in several files in some project:
fatal error C1033: cannot open program database 'v:\temp\apprtctest\win32\release\vc80.pdb'
(The file mentioned is either vc80.pdb or vc80.idb in the project's temp dir.) The next build of the same project succeeds. There is no other Visual Studio open that might access the same files.
This is a serious problem because it makes nightly compilation impossible.

+4  A: 

We've seen this a lot at my site too. This explanation, from Peter Kaufmann, seems to be the most plausible based on our setup:

When building a solution in Visual Studio 2005, you get errors like fatal error C1033: cannot open program database 'xxx\debug\vc80.pdb'. However, when running the build for a second time, it usually succeeds.

Reason: It's possible that two projects in the solution are writing their outputs to the same directory (e.g. 'xxx\debug'). 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.

SCFrench
Thanks, but neither of the two is my case (unless TSVN does something in the background when no update is being performed).
Lev
Just wanted to say that I've seen this error before and setting the number of parallel builds to 1 fixed it for me... though clearly, the OP experienced something different.
Nik Reiman
+5  A: 

It is possible that an antivirus or a similar program is touching the pdb file on write - an antivirus is the most likely suspect in this scenario. I'm afraid that I can only give you some general pointers, based on my past experience in setting nightly builds in our shop. Some of these may sound trivial, but I'm including them for the sake of completion.

  • 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.

If nothing else works, you can schedule a watchdog script a few hours after the build starts and check its status; if the build fails, the watchdog should restart it. This is an ugly hack, but it's better than nothing.

Laur
I guess that's the problem.
Lev
Generally anti-virus on-access scanners work by installing a file-system filter. User-mode programs should see no difference. More likely to be a search indexer or similar.
Mike Dimmick
Turning off the antivirus helped!
Lev
A: 

It might also be a search indexer.

Lev
A: 

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.

A: 

Are you using LinqToSql at all? Perhaps it is similar to the odd error I will experience occasionally as I asked in this question: What causes Visual Studio to fail to load an assembly incorrectly?

Ian Patrick Hughes
No. :-(
Lev
A: 

We are facing this issue fatal error C1033: cannot open program database 'xxx\debug\vc70.pdb' while building the targets in a parallel fashion. How can we solve this issue without building serially.

Thanks, Shweta

A: 

FWIW, I'm seeing this same issue in VS 2008 (9.0). I think SCFrench's answer makes a lot of sense. I'm sure it's the cause in my case.

Hawkeye Parker