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)
Codeview is a much older debugging format that was introduced with Microsoft’s old standalone debugger back in the ‘Microsoft C Compiler’ days of the mid-1980s. It takes up more space on disk and it takes longer for the debugger to parse, and it’s a major pain to process during linking. We generated it from our compiler back when I was working on the CodeWarrior for Windows in 1998-2000.
The one advantage is that Codeview is a documented format, and other tools can often process it when they couldn’t deal with PDB-format debug databases. Also, if you’re building multiple files at a time, there’s no contention to write into the debug database for the project. However, for most uses these days, using the PDB format is a big win, both in build time and especially in debugger startup time.