OK so one thing I'm not clear about...

Can System.Diagnostics.SymbolStore read both C/C++ and .Net PDBs, or is it strictly .Net only? The documentation only mentions .Net but if you look at this you can see many languages represented including C/C++. I think it is using DIA underneath so it makes sense to be able to read C/C++ PDBs too. But so far in my searches I have not been able to determine either way.

BTW, does anyone know if PDBs contain the preprocessor definitions that were used to compile the executable with?