Je viens de rencontrer cette erreur dans VS2012. Il est définitivement causé par un bogue dans Visual Studio, qui se révèle dans des situations où le fichier PDB local du projet principal porte le même nom que le fichier PDB final pour tout l'exécutable (même si les deux se trouvent dans des répertoires différents!)
Considérons cet exemple.
La solution consiste en trois projets: main
, a
et b
. main
est le projet de niveau supérieur pour l'exécutable, tandis que a
et b
sont des bibliothèques liées à main
.
Dans les trois projets, la variable $(IntDir)
est définie sur $(SolutionDir)\$(Configuration)\$(ProjectName)\
. Cela signifie que le projet main
vide ses fichiers intermédiaires à Debug\main\
, projet a
- à Debug\a\
et ainsi de suite.
Dans les paramètres C/C++ -> Output Files
, tous les trois projets ont la valeur Program Database File Name
définie sur $(IntDir)$(TargetName).pdb
. Cela signifie que le projet main
génère son fichier PDB local en tant que Debug\main\main.pdb
, le projet b
en tant que Debug\b\b.pdb
et ainsi de suite.
Enfin, dans les paramètres Linker -> Debugging
du projet main
, la valeur Generate Program Database File
est définie sur $(OutDir)$(TargetName).pdb
. Cela signifie que le fichier PDB global pour l'exécutable entier sera généré comme Debug\main.pdb
.
Notez que dans cette configuration, chaque fichier PDB est généré dans son propre répertoire distinct.
Dans cette configuration, vous obtiendrez Les informations de débogage sont introuvables ou ne correspondent pas à l'erreur si vous tentez d'exécuter le programme sous le débogueur.Et si vous jetez un oeil au fichier Debug\main.pdb
(qui existera), vous remarquerez que c'est exactement le même que le fichier Debug\main\main.pdb
! C'est à dire. en quelque sorte la PDB locale pour main
a réussi à remplacer ce qui était supposé être la PDB globale pour l'exécutable final. C'est à dire. le débogueur a raison de se plaindre que le fichier PDB est "faux". C'est en effet faux.
Encore une fois, dans la configuration ci-dessus, le PDB global final est écrasé par le PDB local du projet principal. Je ne sais pas pourquoi ça arrive. Cela semble être un bug. (Notez que même si ces fichiers PDB ont le même nom, ils sont générés dans des répertoires différents, ils ne doivent pas être en conflit.)
Une solution de contournement qui résout ce problème consiste à donner un nom différent à la PDB locale du projet main
. Par exemple, passez au C/C++ -> Output Files
pour le projet main
et remplacez la valeur Program Database File Name
par $(IntDir)$(TargetName)_local.pdb
(ou par $(IntDir)12345.pdb
si vous le souhaitez). Cela permettra d'éliminer le conflit et de résoudre le problème.
Une telle solution facile! – Watusimoto
@NicholasGuillaume Je cours en version et j'obtiens cette erreur. Je ne veux pas générer d'informations de débogage. Y at-il un moyen que je peux Visual Studio de ne pas essayer de lancer avec des informations de débogage? –
@JonathanMee Pas aussi loin que je sache. –