代码之家  ›  专栏  ›  技术社区  ›  Lev

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

  •  34
  • Lev  · 技术社区  · 18 年前

    在使用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可以访问相同的文件。

    12 回复  |  直到 15 年前
        1
  •  23
  •   SCFrench    18 年前

    This explanation 从我们的设置来看,Peter Kaufmann的观点似乎是最合理的:

    原因:解决方案中的两个项目可能正在将其输出写入同一目录(例如“xxx\debug”)。如果将“工具-选项、项目和解决方案-Bild和运行”中的“并行项目生成的最大数量”设置为大于1的值,这意味着两个编译器线程可能试图同时访问相同的文件,从而导致文件共享冲突。 更新:即使文件不在版本控制下,也有可能乌龟SVN访问“vc80.pdb”,这也可能导致上述错误(感谢Liana的报告)。但是,我无法确认这一点,因为在确保所有项目使用不同的输出目录后,我无法重现该问题。

        2
  •  23
  •   Laur    18 年前

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

    • 首先也是最重要的:确保你一开始就一清二楚。也就是说,在开始夜间操作之前,强制删除生成的输出目录。
    • 如果你有一个防病毒软件,反间谍软件或其他这样的程序在你的夜间机器,考虑删除它们。如果这不是一个选项,请将您的obj文件夹添加到程序的排除列表中。

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

        3
  •  10
  •   Walery Strauch Lia    10 年前

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

    Project Options -> C/C++ -> General -> Debug Information Format C7 .

        4
  •  6
  •   mihirg mihirg    18 年前

    这通常发生在以前的调试尝试未完全终止调试器时。 最糟糕的选择是重新启动visual studio,这应该可以解决您的问题。

        5
  •  1
  •   Julian Mann    15 年前

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

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

        6
  •  1
  •   Vin.X    15 年前

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

        7
  •  1
  •   Logan    12 年前

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

        8
  •  1
  •   Tejas Sharma    11 年前

    我只是遇到了这个问题。Visual studio抱怨无法打开 vc100.pdb . 我使用查找此文件的打开文件句柄 procexp 并且发现这个过程 mspdbsrv 有一个打开的文件句柄。终止这个进程解决了这个问题,我能够编译。

        9
  •  0
  •   Community Mohan Dere    9 年前

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

        10
  •  0
  •   Walery Strauch Lia    10 年前

    我更改了我的中间目录,从:

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

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

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

        11
  •  0
  •   CLIFFORD P Y    10 年前

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

    脚本

    我有两个dll parent.dll 和 child.dll

    解决方案

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

        12
  •  0
  •   jozxyqk    9 年前

    如果我 Ctrl键 +

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