I am getting confused as to what is the difference between the compiler and linker PDB
files respectively (i.e. in Visual Studio, Project Properties >
I honestly don't know what exactly the .pdb file generated by the compile step is used for - I assume that it's some intermediate information the gets pulled into the final .pdb file by the linker.
However, the bottom line is that for debugging purposes all you need is the .pdb file that is produced by the linker.
Update: A little digging netted this from http://blogs.msdn.com/b/yash/archive/2007/10/12/pdb-files-what-are-they-and-how-to-generate-them.aspx:
What are the two types of .PDB files?
==============================
There are two types of PDB files. One generated by the compiler named as VCx0.PDB(e.g. vc80.pdb), and another the .PDB.
The VCx0.PDB file is generated by the compiler and it is related to the .OBJ file. It contains the type information only.
The .PDB files are generated by the linker and it is related with the target executable or the DLL. This file contains the complete debug info. When we are debugging, we need this ‘.pdb’ file for aligning to the symbols. The timestamp of the target file and the PDB should match.