Microsoft KB Archive/291585

= How to Create Debug Symbols for a Visual C++ Application =

Article ID: 291585

Article Last Modified on 11/27/2006

-

APPLIES TO


 * Microsoft Visual C++ 6.0 Enterprise Edition
 * Microsoft Visual C++ .NET 2003 Standard Edition
 * Microsoft Visual C++ .NET 2002 Standard Edition

-



This article was previously published under Q291585



SUMMARY
You may have to create symbols that you can use when you debug dump files or when you perform live debugging by using the Microsoft Debugging Tools for Windows. To download these tools, visit the following Microsoft Web site:

http://www.microsoft.com/whdc/devtools/debugging/default.mspx

Symbols are data that let the debugger know about source and line information, variables that are used in your application, and data type information for your program.

This article describes how to create symbol files, specifically .pdb files, when you build a release version of your Visual C++ applications. When you work with Microsoft Product Support Services, you may be asked to provide these files to help the Support Professional who is assisting you to determine the cause of a problem that you are experiencing. For this reason, it is a good practice to build symbol files with each specific released version of your application.

This article assumes that you are familiar with building applications by using Microsoft Visual C++. See the Visual C++ documentation for definitive details about how to create symbol files.



MORE INFORMATION
There are two types of builds: release and debug. Always set the build type to release for builds that are shipped to customers. The debug build is frequently used during the development phase of the application. Both types of builds can be debugged, and both types of builds must have symbols to debug them. One important difference is that the release setting in Visual C++ turns on compiler optimization and the debug setting turns compiler optimization off. When compiler optimization is turned on, the application runs faster. However, it is not as easy to step through the code because the source code lines are not compiled in the exact order that they appear in the source code. Therefore, during the development phase of a project, it is easier to debug a debug build.

In both the Visual C++ 6.0 and the Visual C++ .NET development environments, you can create a debug build by selecting debug as the build type, and you can create a release build by selecting release as the build type. If you are not using the Visual C++ development environments, you must know what compiler and linker options to set.

To enable debugging of a release build for Visual C++ .NET or for Visual C++ 6.0, change the following compiler options on the Cl.exe compile of your build:

Compiler

 * Enable /Z7 for Visual C++ .NET
 * Enable /Zi for Visual C++ 6.0
 * Enable /O2

For additional information about the Compiler option, visit the following Microsoft Developer Network (MSDN) Web site:

http://msdn.microsoft.com/library/en-us/vccore98/HTML/_core_Compiler_Reference.asp

Linker

 * Select/INCREMENTAL:NO
 * Select /DEBUG:Yes
 * Select /OPT:REF
 * Select /OPT:ICF

For additional information about the Linker option, visit the following MSDN Web site:

http://msdn.microsoft.com/library/en-us/vccore98/HTML/_core_linker_reference.asp

Enable Debugging in a Release Build in Visual C++ 6.0
To enable debugging in a release build in a Visual C++ 6.0 development environment, follow these steps:
 * 1) On the Project menu, click Settings.
 * 2) Click Win32 Release configuration.
 * 3) On the C/C++ tab, click General, and then set the following:
 * 4) * Set Optimizations to Maximize Speed or to Minimize Size.
 * 5) * Set Debug Info to Program Database.
 * 6) On the Link tab, click General, and then set the following:
 * 7) * Make sure that you click to select Generate debug info.
 * 8) * Make sure that you clear the Link incrementally check box.
 * 9) Edit the Project options directly, and then add /opt:ref,icf.

You can now debug your release build application. To find the problem, step through the code until you find where the failure occurs, and then determine the incorrect parameters or code. If a program works in a debug build, but fails in a release build, it is likely that one of the compiler optimizations is exposing a defect in your source code.

To create a debug build, use the following options:

Compiler

 * Enable /ZI
 * Enable /Od

Linker

 * /debug
 * /incremental:yes

After you have completed the steps, and you recompile the application, you will have .pdb files in either the \Debug or the \Release directory of your project, depending on your build configuration.

