web-dev-qa-db-fra.com

La compilation échoue de façon aléatoire: "impossible d'ouvrir la base de données du programme"

Lors d'une longue compilation avec Visual Studio 2005 (version 8.0.50727.762), j'obtiens parfois l'erreur suivante dans plusieurs fichiers d'un projet:

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

(Le fichier mentionné est soit vc80.pdb ou vc80.idb dans le répertoire temporaire du projet.)

La prochaine génération du même projet réussit. Aucun autre Visual Studio ouvert ne peut accéder aux mêmes fichiers.

C'est un problème grave car cela rend la compilation nocturne impossible.

36
Lev

Il est possible qu'un antivirus ou un programme similaire touche le fichier pdb en écriture - un antivirus est le suspect le plus probable dans ce scénario. Je crains de ne pouvoir vous donner que des indications générales, basées sur mon expérience passée dans la création de versions nocturnes dans notre boutique. Certains d'entre eux peuvent sembler insignifiants, mais je les inclue dans un souci d'achèvement.

  • Avant tout: assurez-vous de commencer avec une ardoise propre. Autrement dit, supprimez de force le répertoire de sortie de la génération avant de commencer votre soirée.
  • Si vous avez un antivirus, un antispyware ou d'autres programmes de ce type sur votre machine de nuit, pensez à les supprimer. Si ce n'est pas une option, ajoutez votre dossier obj à la liste d'exclusion du programme.
  • (facultatif) Envisagez d'utiliser des outils tels que VCBuild ou MSBuild dans le cadre de votre soirée. Je pense qu'il est préférable d'utiliser MSBuild si vous êtes sur une machine multicœur. Nous utilisons IncrediBuild pour les nightlies et MSBuild pour les versions, et nous n'avons jamais rencontré le problème que vous décrivez.

Si rien d'autre ne fonctionne, vous pouvez planifier un script de surveillance quelques heures après le début de la génération et vérifier son état; si la construction échoue, le chien de garde doit le redémarrer. C'est un vilain hack, mais c'est mieux que rien.

21
Laur

Nous l'avons également vu beaucoup sur mon site. Cette explication , de Peter Kaufmann, semble être la plus plausible en fonction de notre configuration:

Lors de la création d'une solution dans Visual Studio 2005, vous obtenez des erreurs telles que l'erreur fatale C1033: impossible d'ouvrir la base de données de programme 'xxx\debug\vc80.pdb'. Cependant, lors de la deuxième exécution de la génération, elle réussit généralement.

Raison: il est possible que deux projets de la solution écrivent leurs sorties dans le même répertoire (par exemple, 'xxx\debug'). Si le nombre maximal de constructions de projets parallèles défini dans Outils - Options, projets et solutions - Bild et Exécuter est défini sur une valeur supérieure à 1, cela signifie que deux threads du compilateur peuvent essayer d'accéder simultanément aux mêmes fichiers, ce qui entraîne la création d'un fichier partage des conflits. Solution: vérifiez les paramètres de votre projet et assurez-vous qu'aucun projet n'utilise le même répertoire pour la sortie, la cible ou tout autre type de fichiers intermédiaires. Ou définissez le nombre maximal de versions de projets parallèles sur 1 pour une solution rapide. J'ai rencontré ce problème lors de l'utilisation des fichiers de projet VS fournis avec la bibliothèque CLAPACK. MISE À JOUR: Il est possible que Tortoise SVN accède à 'vc80.pdb', même si le fichier n'est pas sous contrôle de version, ce qui pourrait également entraîner l'erreur décrite ci-dessus (merci à Liana de l'avoir signalé). Cependant, je ne peux pas le confirmer, car je n'ai pas pu reproduire le problème après m'être assuré que différents répertoires de sortie sont utilisés pour tous les projets.

23
SCFrench

Basculez les informations de débogage au format C7 au lieu d'utiliser la PDB.

Project Options -> C/C++ -> General -> Debug Information Format et définissez-le sur C7.

8
M.H.

Cela se produit généralement lorsque vos précédentes tentatives de débogage n'ont pas complètement tué le débogueur. Dans le Gestionnaire des tâches, recherchez un processus appelé vcjit, supprimez-le et réessayez. La pire option est de redémarrer Visual Studio, cela devrait résoudre votre problème.

6
mihirg

J'ai eu ce problème aujourd'hui et il s'est avéré qu'il s'agissait de caractères non ansi dans le chemin vers le pdb qui l'a causé.

J'utilise Windows via vmware et mon projet était dans un emplacement partagé:\vmware-Host\Shared Folders\project

Lorsque je l'ai déplacé vers\Users\julian\project, cela a résolu le problème.

1
Julian Mann

J'ai eu un problème similaire en travaillant sur un projet que j'avais localisé dans mon dossier Dropbox. J'ai trouvé que cela déclencherait cette erreur lorsque la petite icône de "synchronisation" se trouvait sur l'icône Dropbox dans la barre d'état système, puisque Dropbox accédait aux fichiers pour les télécharger sur leur serveur. Lorsque j'ai attendu de construire jusqu'à la fin de la synchronisation de Dropbox, cela a fonctionné à chaque fois.

1
Logan

Je viens de rencontrer ce problème. Visual studio se plaignait de ne pas pouvoir ouvrir vc100.pdb. J'ai cherché des descripteurs de fichiers ouverts dans ce fichier en utilisant procexp et j'ai découvert que le processus mspdbsrv avait un descripteur de fichier ouvert. Tuer ce processus a résolu le problème et j'ai pu compiler.

1
Tejas Sharma

Essayez avec le bouton droit sur le fichier exécutable de VS .... et Propriétés-> Compatibilité-> Cochez "Exécuter ce programme en mode de compatibilité pour:" OFF ........

1
Vin.X

Cela m'arrive régulièrement si je Ctrl+Break pour annuler une build (vs2015). Il y a un processus qui n'est pas arrêté correctement. Je suis allé sur un processus déchaîné de "fin de tâche" ms/vs (recherchez les doublons) et ma version a de nouveau fonctionné. Un redémarrage fonctionnerait probablement aussi. Tout comme le passage aux gnu binutils.

Les outils de déverrouillage ennuyeux ne signalent aucun processus de verrouillage du fichier, Windows ne me permet pas de supprimer le .pdb mais je peux le renommer. Je suppose que deux processus interviennent en même temps lors d'une génération.

0
jozxyqk

J'ai changé mon répertoire intermédiaire de:

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

à

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

Ça fonctionne maintenant. AUCUNE idée pourquoi.

0
Jeff McClintock

Utilisez-vous du tout LinqToSql? C'est peut-être similaire à l'erreur étrange que je rencontrerai occasionnellement comme je l'ai demandé dans cette question: Qu'est-ce qui empêche Visual Studio de charger incorrectement un assembly?

0
Ian Patrick Hughes

J'ai le même problème C1033: cannot open program database,

Scénario

J'ai deux DLL parent.dll et child.dll. Je viens de joindre le projet child.dll avec le débogueur Visual Studio en même temps j'essaye de construire le parent.dll projet, produit une erreur C1033: cannot open program database

Solution

Arrêtez le débogage et supprimez le processus associé au débogueur. Reconstruisez le projet

0
CLIFFORD P Y