Intel® Fortran Compiler Classic and Intel® Fortran Compiler Developer Guide and Reference

ID 767251
Date 7/13/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

Debugging and Optimizations

This topic describes the relationship between various command-line options that control debugging and optimizing.

Whenever you enable debugging with the -g option (Linux* and macOS) or /debug:full option (Windows*), you disable optimizations. You can override this behavior by explicitly specifying compiler options for optimizations on the command line.

The following summarizes commonly used options for debugging and for optimization.

Option

Description

Linux and macOS

-O0

Windows

/Od

Disables optimizations so you can debug your program before any optimization is attempted. This is the default behavior when debugging.

NOTE:

On Linux and macOS, -fno-omit-frame-pointer is set if either option -O0 or -g is specified.

For more information, see the following topics:

  • -O0 (Linux and macOS) compiler option
  • /Od (Windows) compiler option

Linux and macOS

O1, O2, or O3

Windows

O

Specifies the code optimization level for applications. If you use any of these options, it is recommended that you use -debug extended when debugging.

For more information, see the following topics:

  • -O1, -O2, -O3 (Linux and macOS) compiler options

  • /O (Windows) compiler option

Linux and macOS

-g

Windows

/debug:full

Generates symbolic debugging information and line numbers in the object code for use by the source-level debuggers. Turns off O2 and makes -O0 (Linux and macOS) or /Od (Windows) the default. The exception to this is if options O1, O2, or O3 are explicitly specified in the command line.

For more information, see the following topics:

  • -g (Linux and macOS)
  • /debug:full (Windows) compiler option

Linux and macOS

-debug extended

Specifies settings that enhance debugging.

For more information, see the following topic:

  • -debug extended (Linux and macOS)

traceback

Causes the compiler to generate extra information in the object file, which allows a symbolic stack traceback.

For more information, see the following topic:

  • traceback compiler option

Combine Optimization and Debugging

The compiler lets you generate code to support symbolic debugging when O1, O2, or O3 optimization options are specified on the command line along with -g (Linux and macOS) or /debug:full (Windows); this produces symbolic debug information in the object file.

NOTE:

Note that if you specify an O1, O2, or O3 option with the -g (Linux and macOS) or /debug:full (Windows) option, some of the debugging information returned may be inaccurate as a side-effect of optimization.

To counter this on Linux and macOS, you should also specify the -debug extended option.

It is best to make your optimization and/or debugging choices explicit:

  • If you need to debug your program excluding any optimization effect, use the -O0 (Linux and macOS) or /Od (Windows) option, which turns off all the optimizations.

  • If you need to debug your program with optimizations enabled, then you can specify the O1, O2, or O3 option on the command line along with debug extended.

NOTE:

When no optimization level is specified, the -g or /debug:full option slows program execution; this is because this option turns on -O0 or /Od, which causes the slowdown. However, if both O2 and -g (Linux and macOS) or /debug:full (Windows) are specified, for example, the code should not experience much of a slowdown.

Refer to the following table for the summary of the effects of using the -g or /debug:full option with the optimization options.

Option

Effect

Linux and macOS

-g

Windows

/debug:full

Debugging information produced, -O0 (Linux and macOS) or /Od (Windows) enabled (meaning optimizations are disabled).

Linux and macOS

-g-O1

Windows

/debug:full /O1

Debugging information produced, O1 optimizations enabled.

Linux and macOS

-g-O2

,

Windows

/debug:full /O2

Debugging information produced, O2 optimizations enabled.

Linux and macOS

-g-O2

Windows

/debug:full /O2 /Oy-

Debugging information produced, O2 optimizations enabled.

Linux and macOS

-g -O3 -fp

Windows

/debug:full /O3

Debugging information produced, O3 optimizations enabled.

NOTE:

Even the use of option debug extended with optimized programs may not allow you to examine all variables or to set breaks at all lines, due to code movement or removal during the optimization process.