Acabo de encontrar este error en VS2012. Definitivamente es causado por un error en Visual Studio, que se revela en situaciones en las que el archivo PDB local del proyecto principal tiene el mismo nombre que el archivo final PDB para todo el ejecutable (¡incluso si los dos están ubicados en directorios diferentes!)
Considere este ejemplo.
La solución consta de tres proyectos: main
, a
y b
. main
es el proyecto de nivel superior para el ejecutable, mientras que a
y b
son bibliotecas vinculadas al main
.
En los tres proyectos, la variable $(IntDir)
se establece en $(SolutionDir)\$(Configuration)\$(ProjectName)\
. Esto significa que el proyecto main
vuelca sus archivos intermedios a Debug\main\
, proyecto a
- a Debug\a\
y así sucesivamente.
En C/C++ -> Output Files
ajustes los tres proyectos tienen Program Database File Name
valor establecido en $(IntDir)$(TargetName).pdb
. Esto significa que el proyecto main
genera su archivo PDB local como Debug\main\main.pdb
, proyecto b
como Debug\b\b.pdb
y así sucesivamente.
Por último, en la configuración de proyecto Linker -> Debugging
main
el valor se establece en Generate Program Database File
$(OutDir)$(TargetName).pdb
. Esto significa que el archivo PDB global para todo el ejecutable se generará como Debug\main.pdb
.
Tenga en cuenta que en esta configuración cada archivo PDB se genera en su propio directorio separado.
En esta configuración obtendrá La información de depuración no se puede encontrar o no coincide con el error si intenta ejecutar el programa en el depurador.Y si echas un vistazo al archivo Debug\main.pdb
(que existirá), verás que es exactamente el mismo que el archivo Debug\main\main.pdb
. Es decir. de alguna manera, el PDB local para main
logró sobrescribir lo que se suponía que era el PDB global para el ejecutable final. Es decir. el depurador está en lo correcto al quejarse de que el archivo PDB es "incorrecto". De hecho, está mal.
De nuevo, en la configuración anterior, el PDB global final de alguna manera es sobrescrito por el PDB local del proyecto superior. No sé por qué sucede. Parece ser un error. (Tenga en cuenta que aunque estos archivos PDB tienen el mismo nombre, se generan en directorios diferentes, es decir, no deberían entrar en conflicto.)
Una solución que soluciona este problema es asignarle un nombre diferente al PDB local del proyecto main
. Por ejemplo, solo vaya a C/C++ -> Output Files
para el proyecto main
y cambie el valor Program Database File Name
a $(IntDir)$(TargetName)_local.pdb
(o al $(IntDir)12345.pdb
si lo desea). Esto eliminará el conflicto y resolverá el problema.
una solución tan fácil! – Watusimoto
@NicholasGuillaume Me estoy ejecutando en versión y obtengo este error. No quiero generar información de depuración. ¿Existe alguna manera de que Visual Studio no intente ejecutar con información de depuración? –
@JonathanMee No tan lejos como sé. –