About Building Applications for Dynamic Analysis

Follow these guidelines to build applications that produce the most accurate and complete dynamic analysis results:

About Using Optimal Compiler/Linker Settings

You can use the Intel® Inspector to analyze:

  • Memory errors in debug and release modes of:

    • C++ binaries - The Intel Inspector can analyze native code in native and mixed native/managed binaries.

    • Fortran binaries - The Intel Inspector can analyze native code in native binaries.

  • Threading errors in debug and release modes of:

    • C++ binaries - The Intel Inspector can analyze native and managed code in native, managed, and mixed native/managed binaries.

    • Fortran binaries - The Intel Inspector can analyze native code in native binaries.

Applications compiled/linked in debug mode using the following settings produce the most accurate and complete analysis results.

Compiler/Linker Property

Correct C/C++ Setting

Correct Fortran Setting

Impact If Not Set Correctly

Debug information

Enabled (/Zi or /ZI)

Enabled (/debug:full)

Missing file/line information

Optimization

Disabled (/Od)

Disabled (/Od)

Incorrect file/line information

Dynamic runtime library

Selected (/MD or /MDd)

Selected (/libs:dll/threads or libs:dll/threads/dbglibs )

False positives or missing code locations

Basic runtime error checks

Disabled (do not use /RTC; Default option in Visual Studio* IDE)

None (/check:none)

False positives

To learn more about options necessary to produce the most accurate and complete dynamic analysis results, see the following resources:

  • Memory error analysis - http://software.intel.com/en-us/articles/compiler-settings-for-memory-error-analysis-in-intel-inspector-xe/

  • Threading error analysis - http://software.intel.com/en-us/articles/compiler-settings-for-threading-error-analysis-in-intel-inspector-xe/

About Ensuring Applications Contain More Than One Thread

If you plan to run threading error analyses on systems with only one processor, you may need to take special steps to ensure applications create more than one thread:

Programming Model

Possible Strategies

Intel® Threading Building Blocks

When initializing an object of class tbb::task_scheduler_init, use the following function to force the creation of two or more threads: initialize (int), where int = 2 or higher.

For more information, see http://www.threadingbuildingblocks.org/

Windows* API (Win32)

Use the following function to create as many threads as you need: CreateThread - Creates a thread to execute within the virtual address space of the calling process.

For more information, see http://msdn.microsoft.com/en-us/library/

OpenMP* API

Use the following to force the creation of two or more threads:

  • OMP_NUM_THREADS runtime environment variable - Sets the maximum number of threads in the parallel region, unless overridden by an omp_set_num_threads function or num_threads clause.

  • omp_set_num_threads function - Sets the number of threads in subsequent parallel regions, unless overridden by a num_threads clause.

  • num_threads clause - Sets the number of threads in a thread team.

For more information, see http://openmp.org/wp/openmp-specifications/

See Also


Supplemental documentation specific to a particular Intel Studio may be available at <install-dir>\<studio>\documentation\ .

For more complete information about compiler optimizations, see our Optimization Notice.