I’ve noticed that when generating a new C++ project using MS Visual Studio 2008, the Release build contains debugging symbols – specifically the following settings are enabled:
- The C++/General/Debug Information Format is set to Program Database.
- The Linker/Debugging/Generate Debug Info setting is set to Yes.
I have never noticed this on earlier releases of Visual Studio.
So, other than generating a larger EXE file, is there any downside to leaving these settings enabled?
We have turned on those settings in our commercial releases for years now with no apparent downside. The upsides are enormous,though.
We have integrated a crash dump packager that packages the dump along with some other information and emails it (with the user’s consent) to a company inbox. This has helped us find problems that would have taken us forever to reproduce and find otherwise.
Although it’s slightly off topic, here’s a link to an excellent contribution someone made that gives you an easy way to include a crash reporter to a C++/Windows app: http://www.codeproject.com/KB/debug/crash_report.aspx
Note: It would be wise, though, not to include the PDB file with your release. That said, you must keep the PDB file that matches your released version so that you can correctly debug the problem in the future. If a PDB file is used that wasn’t built with the same code that built the exe, the stack you see when you try to debug the dmp will be wrong.