I just encountered this error in VS2012. It is definitely caused by a bug in Visual Studio, which reveals itself in situations when the local PDB file of the main project has the same name as the final PDB file for the entire executable (even if the two are located in different directories!)
Consider this example.
Solution consists of three projects: main
, a
, and b
. main
is the top-level project for the executable, while a
and b
are libraries linked into main
.
In all three projects $(IntDir)
variable is set to $(SolutionDir)\$(Configuration)\$(ProjectName)\
. This means that project main
dumps its intermediate files to Debug\main\
, project a
- to Debug\a\
and so on.
In C/C++ -> Output Files
settings all three projects have Program Database File Name
value set to $(IntDir)$(TargetName).pdb
. This means that project main
generates its local PDB file as Debug\main\main.pdb
, project b
as Debug\b\b.pdb
and so on.
Finally, in Linker -> Debugging
settings of project main
the Generate Program Database File
value is set to $(OutDir)$(TargetName).pdb
. This means that the global PDB file for the entire executable will be generated as Debug\main.pdb
.
Note that in this setup each PDB file is generated in its own, separate directory.
In this setup you will get Debugging information cannot be found or does not match error if you attempt to run the program under the debugger. And if you take a look at the Debug\main.pdb
file (which will exist), you will notice that it is exactly the same as Debug\main\main.pdb
file! I.e. somehow the local PDB for main
managed to overwrite what was supposed to be the global PDB for the final executable. I.e. the debugger is right to complain that the PDB file is "wrong". It is indeed wrong.
Again, in the above setup the final global PDB somehow gets overwritten by local PDB of the top project. I don't know why it happens. It appears to be a bug. (Note that even though these PDB files have the same name, they are generated in different directories, i.e. they should not conflict.)
A workaround that fixes this issue is to give the local PDB of project main
a different name. For example, just go to C/C++ -> Output Files
for the main
project and change Program Database File Name
value to $(IntDir)$(TargetName)_local.pdb
(or to $(IntDir)12345.pdb
if you so desire). This will eliminate the conflict and solve the problem.