Background
There are several different debug flags you can use with the Visual Studio C++ compiler. They are:
- (none)
- Create no debugging information
- Faster compilation times
- /Z7
- Produce full-symbolic debugging information in the .obj files using CodeView format
- /Zi
- Produce full-symbolic debugging information in a .pdb file for the target using Program Database format.
- Enables support for minimal rebuilds (/Gm) which can reduce the time needed for recompilation.
- /ZI
- Produce debugging information like /Zi except with support for Edit-and-Continue
Issues
The /Gm flag is incompatible with the /MP flag for Multiple Process builds (Visual Studio 2005/2008)
If you want to enable minimal rebuilds, then the /Zi flag is necessary over the /Z7 flag.
If you are going to use the /MP flag, there is seemingly no difference between /Z7 and /Zi looking at MSDN. However, the SCons documentation states that you must use /Z7 to support parallel builds.
Questions
What are the implications of using /Zi vs /Z7 in a Visual Studio C++ project?
Are there other pros or cons for either of these options that I have missed?
Specifically, what is the benefit of a single Program Database format (PDB) file for the target vs multiple CodeView format (.obj) files for each source?
References
MDSN /Z7, /Zi, /ZI (Debug Information Format)
MSDN /MP (Build with Multiple Processes)