Intel® Inspector XE 2013

Memory and thread debugger.

  • Find memory leaks and memory allocation errors quickly.
  • Locate difficult to find threading errors like data races and deadlocks.
  • Detect out of bounds accesses and dangling pointers.**

Buy Now

Or Download a Free 30-Day Evaluation Version

Deliver More Reliable Applications

Intel® Inspector XE is an easy to use memory debugger and thread debugger for serial and parallel applications. It is now integrated with popular debuggers to simplify thread debugging and memory error debugging. Enhance productivity, cut cost and speed time-to-market with Intel® Inspector XE.

**When purchased as a part of one of the Parallel Studio XE family of suites.


Intel Inspector XE takes you to the source locations of threading and memory errors and provides a call stack to help you determine how you got there.

Find crucial threading and memory errors early in the development cycle. The earlier you find an error, the lower the cost to fix it. Intel® Inspector XE 2013 makes it easy to find and diagnose errors early.

Find errors that traditional regression testing misses. Intel® Inspector XE finds latent threading and memory errors on the executed code path plus intermittent and non-deterministic errors, even if the error-causing timing scenario does not happen.

New for 2013! Debugger integration and heap growth analysis.


Quotes

“Intel® Inspector XE is quite fast and intuitive compared to products we have used in the past. We can now run our entire batch of test cases (~750) which was not feasible previously.  Intel® Inspector XE easily completed tests that failed due to lack of virtual memory on another product.”
Gerald Mattauch
Senior Software Developer
Siemens AG, Healthcare Sector

“We struggled for a week with a crash situation, the corruption was identified but the source was really hard to find.   Then we ran Intel® Inspector XE and immediately found the array out of bounds that occurred long before the actual crash.  We could have saved a week!”
Mikael Le Guerroué,
Senior Codec Architecture Engineer,
Envivio

“The video processing and encoding libraries we develop need to be error free.  Intel® Inspector XE has dramatically sped up our ability to find/fix memory problems and track down difficult to isolate threading errors before our packages are released to the field.”
Peter von Kaenel
Director, Software Development
Harmonic Inc.

Finds Memory Errors

  • Memory leaks
  • Memory corruption
  • Allocation / de-allocation API mismatches
  • Inconsistent memory API usage

Finds Threading Errors

  • Data races – both heap & stack
  • Deadlocks
  • Thread and sync API errors

List of errors: Windows* | Linux*

Fits your workflow.

No special builds are required, just use your normal debug or production build. Inspect the same code you are debugging and shipping. Use the friendly graphical user interface or automate regression testing with the command line. The user interface can be used standalone on both Windows* and Linux*

C, C++, C# and Fortran.

Or any mix. Is your GUI in C# with performance sensitive code in C++? Got legacy code in Fortran? Using libraries without the source? No problem, it all works. Dynamic instrumentation enables inspection of all code including third party libraries where the source is not available.

Choose Your Level - Go Fast or Be Thorough

The first level of analysis has very little overhead. Use it during development because it is fast. The second level (shown) takes more time and detects more issues. It is often used before checking in a new feature. The third level is great for regression testing and finding bugs.

Debugger Breakpoints Simplify Diagnosis 

Debugger breakpoints make it easier to diagnose difficult errors by breaking into the debugger just before the error occurs. Examine variables and look at other threads to diagnose the problem. Visual Studio, GDB and IDB debuggers are supported. Just select the error and choose “Debug This Problem” from the pop-up menu.

Analyze Heap Growth 

Puzzled about what is causing your memory use to grow and grow as your app continues to run? Heap growth analysis helps you diagnose the cause. It creates a list of memory allocations that are not freed in an interval specified with the GUI or an API.

Pause/Resume Speeds Up Analysis

Speed-up analysis by limiting its scope. Turn on analysis only during the execution of the suspected problem. Instrumentation overhead is reduced to speed through long irrelevant sections of code. Used carefully, this can be very powerful in situations where long run times are required to reach the error.

Suppress False Errors, Share with the Team

False errors are easily added to a suppression list so you don’t need to investigate them next time. Multiple lists are supported and can be shared with other project members. Create your own private suppressions to block errors that are not in your code. Suppressing an entire module can also reduce collection time.

Improved Suppressions

Suppressions are now more precise and shareable. Choose which stack frame to suppress – eliminate the false error without suppressing potential real errors. Share suppressions with your team.

Limit Analysis Range 

Eliminate false errors and speed up analysis by using an API to mark memory that should not be analyzed (e.g., it contains a synchronization data structure)

Team Collaboration

Each error reported contains state information (New, Confirmed, Fixed, Not Fixed, Regression, Not a Problem, Deferred) to help you sort and prioritize errors. State information from multiple developers can now be merged and shared. Users can optionally comment on errors to explain why a certain state was set.

Filters Manage the Error List

Just want to see the errors from your source file? Just click and only those errors are shown. Working through the new errors and only want to see the highest severity? Just click. Filters are available for many categories: Severity, problem type, state, module, etc. They weed out the noise and let you focus on what is most important.

Inspect Software for Intel® Xeon Phi™ products 

Intel® Inspector XE 2013 can be used to analyze software for Intel® Xeon Phi™ products even though the analysis does not run on Intel® Xeon Phi™ products. Inspecting your app with Intel Inspector XE running your app on a multicore processor will detect memory errors and threading errors that will occur when running on Intel® Xeon Phi™ products.

Better Team Collaboration 

State information for the errors (confirmed, not a problem, fixed, not fixed, etc.) that is changed by multiple team members can be merged and shared. Team communication is improved with comments on state information.

Dynamic Instrumentation:
Simple, Reliable, Accurate

Unlike other memory and threading analysis tools, Intel Inspector XE 2013 never requires any special recompiles for analysis. Just use your normal debug or production build. (Include symbols so we can map to the source.) This not only makes your workflow faster and easier, it increases reliability and accuracy. Competitive static compilation based instrumentation techniques struggle with dynamically generated or linked code. Intel Inspector XE 2013 inspects all code including third party libraries where the source is not available.

Fewer False Positives, Better Error Messages

Intel Inspector XE 2013 understands the semantics of the Intel® Threading Building Blocks (Intel® TBB) 4.1, Intel® OpenMP and Intel® Cilk™ Plus parallel programming models. This saves time.

1) It reports fewer false positives than competitive products.

2) Errors are described using familiar terms from the source, not with cryptic internal runtime labels.

Multi-OS (Windows* & Linux*)
Same User Interface

Are you developing for both Windows* and Linux*? Wouldn’t it be easier to use the same analysis tools for both OSs? Intel Inspector XE 2013 has the same user interface on both Windows* and Linux*. On Windows* it can be used stand alone or integrated with Microsoft Visual Studio*.

Analyze MPI Applications for
Memory and Threading Errors

With the advent of multicore and hyperthreading, some MPI applications are adding thread parallelism. Intel Inspector XE 2013 can be used to find both memory and threading errors on MPI applications. Performing an initial analysis on a single shared memory system will identify many errors, and additional analysis can also be run on a cluster. Results are sorted by rank.

Analyze MPI Applications 

Find memory errors on MPI applications. Find memory and threading errors on hybrid applications written using MPI and OpenMP. Easy install on a cluster. View results sorted by rank.

Technical Specifications

For additional details, please see the release notes.

Debugger Breakpoints Simplify Diagnosis

Debugger breakpoints make it easier to diagnose difficult errors by breaking into the debugger just before the error occurs. Examine variables and look at other threads to diagnose the problem. Visual Studio, GDB and IDB debuggers are supported. Just select the error and choose “Debug This Problem” from the pop-up menu.

Analyze Heap Growth

Puzzled about what is causing your memory use to grow and grow as your app continues to run? Heap growth analysis helps you diagnose the cause. It creates a list of memory allocations that are not freed in an interval specified with the GUI or an API.

Pause/Resume Speeds Up Analysis

Speed-up analysis by limiting its scope. Turn on analysis only during the execution of the suspected problem. Instrumentation overhead is reduced to speed through long irrelevant sections of code. Used carefully, this can be very powerful in situations where long run times are required to reach the error.

Improved Suppressions

Suppressions are now more precise and shareable. Choose which stack frame to suppress – eliminate the false error without suppressing potential real errors. Share suppressions with your team.

Limit Analysis Range

Eliminate false errors and speed up analysis by using an API to mark memory that should not be analyzed (e.g., it contains a synchronization data structure)

Inspect Software for Intel® Xeon Phi™ products

Intel® Inspector XE 2013 can be used to analyze software for Intel® Xeon Phi™ products even though the analysis does not run on Intel® Xeon Phi™ products. Inspecting your app with Intel Inspector XE running your app on a multicore processor will detect memory errors and threading errors that will occur when running on Intel® Xeon Phi™ products.

Better Team Collaboration

State information for the errors (confirmed, not a problem, fixed, not fixed, etc.) that is changed by multiple team members can be merged and shared. Team communication is improved with comments on state information.

Analyze MPI Applications

Find memory errors on MPI applications. Find memory and threading errors on hybrid applications written using MPI and OpenMP. Easy install on a cluster. View results sorted by rank.

Choose Your Level - Go Fast or Be Thorough

The first level of analysis has very little overhead. Use it during development because it is fast. The second level (shown) takes more time and detects more issues. It is often used before checking in a new feature. The third level is great for regression testing and finding bugs.

Debugger Breakpoints Simplify Diagnosis 

Debugger breakpoints make it easier to diagnose difficult errors by breaking into the debugger just before the error occurs. Examine variables and look at other threads to diagnose the problem. Visual Studio, GDB and IDB debuggers are supported. Just select the error and choose “Debug This Problem” from the pop-up menu.

Analyze Heap Growth 

Puzzled about what is causing your memory use to grow and grow as your app continues to run? Heap growth analysis helps you diagnose the cause. It creates a list of memory allocations that are not freed in an interval specified with the GUI or an API.

Pause/Resume Speeds Up Analysis

Speed-up analysis by limiting its scope. Turn on analysis only during the execution of the suspected problem. Instrumentation overhead is reduced to speed through long irrelevant sections of code. Used carefully, this can be very powerful in situations where long run times are required to reach the error.

Suppress False Errors, Share with the Team

False errors are easily added to a suppression list so you don’t need to investigate them next time. Multiple lists are supported and can be shared with other project members. Create your own private suppressions to block errors that are not in your code. Suppressing an entire module can also reduce collection time.

Team Collaboration

Each error reported contains state information (New, Confirmed, Fixed, Not Fixed, Regression, Not a Problem, Deferred) to help you sort and prioritize errors. State information from multiple developers can now be merged and shared. Users can optionally comment on errors to explain why a certain state was set.

Filters Manage the Error List

Just want to see the errors from your source file? Just click and only those errors are shown. Working through the new errors and only want to see the highest severity? Just click. Filters are available for many categories: Severity, problem type, state, module, etc. They weed out the noise and let you focus on what is most important.

Videos to help you get started.

Register for future Webinars


Previously recorded Webinars:

  • Accelerating financial services applications using Intel® Parallel Studio XE with the Intel® Xeon Phi™ coprocessor

  • Locate and debug troublesome memory and threading errors with Intel® Inspector XE
  • Featured Speakers
  • Intel® Software Correctness – Dynamic & Static Analysis
  • Analysis of hybrid applications with the Intel Cluster Studio XE 2012
  • Note: Video portion will load in about 1 minute, audio will start immediately

    Download slides

  • Using Intel® Inspector XE with Fortran Applications
  • Note: Video portion will load in about 1 minute, audio will start immediately

    Download slides

More Tech Articles

16-Apr-2013
10:52 AM PDT
Useful Links for Intel® Inspector XE 2013 and Intel® Inspector for Systems 2013
By Holly Wilper (Intel)0
  Here are some helpful links:     Important Knowledge Base Articles for Intel® Inspector XE 2013 Detecting memory growth . . .
26-Feb-2013
12:28 PM PST
Intel® Inspector XE 2013: Controlling Analysis Cost
By Holly Wilper (Intel)0
Intel® Inspector XE 2013: Controlling Analysis Cost Find memory and threading errors faster Introduction   Intel® Inspector XE 2013 detects challenging threading and memory errors and provides guidance to help ensure application reliability. When you run an analysis, the Intel Inspector XE . . .
06-Feb-2013
1:32 PM PST
How to use Intel® Inspector 2013 for Systems
By kevin-oleary (Intel)0
Background Intel® System Studio 2013 is the new embedded software tool suite.  This tool suite includes Intel® Inspector 2013 for Systems. This article will explain the steps you need to follow to run Inspector 2013 for Systems on an embedded platform. Overview The embedded OS we will be focused . . .
30-Gen-2013
6:19 AM PST
How to Detect and Repair Correctness Issues in Code to Run on the Intel® Xeon Phi™ Coprocessor Architecture with Intel® Inspector XE
By Holly Wilper (Intel)0
How to Detect and Repair Correctness Issues in Code to Run on the Intel® Xeon Phi™ Coprocessor Architecture with Intel® Inspector XE   Intel® Xeon Phi™ coprocessors combine advanced power performance with the benefits of standard CPU programming models.  Developing and tuning for Intel® Xeon Phi . . .

Pagine

Iscriversi a

Product Documentation and Tutorials

  • For Windows*
  • Loading Intel Software Documentation...

  • For Linux*
  • Loading Intel Software Documentation...

Supplemental Documentation

30-Gen-2013
6:19 AM PST
How to Detect and Repair Correctness Issues in Code to Run on the Intel® Xeon Phi™ Coprocessor Architecture with Intel® Inspector XE
By Holly Wilper (Intel)0
How to Detect and Repair Correctness Issues in Code to Run on the Intel® Xeon Phi™ Coprocessor Architecture with Intel® Inspector XE   Intel® Xeon Phi™ coprocessors combine advanced power performance with the benefits of standard CPU programming models.  Developing and tuning for Intel® Xeon Phi . . .
07-Set-2012
7:18 AM PDT
Intel® Inspector XE 2013 Integrated Debugger Support
By Holly Wilper (Intel)0
Background Using a debugger along with Intel® Inspector XE 2013 can be a powerful combination, giving access to information about variables and workflow at the time of an issue that are not directly accessible through the use of one tool alone. You may wonder why you would want to do this, because . . .
16-Gen-2012
3:51 PM PST
Intel Guide for Developing Multithreaded Applications
By Admin22
The Intel® Guide for Developing Multithreaded Applications covers topics ranging from general advice applicable to any multithreading method to usage guidelines for Intel® software products to API-specific issues.
Iscriversi a

You can reply to any of the forum topics below by clicking on the title. Please do not include private information such as your email address or product serial number in your posts. If you need to share private information with an Intel employee, they can start a private thread for you.

New topic    Search within this forum     Subscribe to this forum


Lauri G.Gio, Giugno 13th 2013 - 4:19
Application exit code: -10737418197
I am trying to run a "Detect Leaks" analysis on a large 64-bit windows application. Analysis starts as it should but stops almost immediately reporting: "No problems detected" However, the collector messages reveals that the exit has happened in the middle of DLL loading, way before the business ...
Antoine S.Mer, Giugno 12th 2013 - 22:50
Intel Inspector XE 2013 not working with Debugger in Visual Studio 20125
Hello. I am evaluating Intel Inspector on a rather large C++ 32 bit multithreaded library on Visual Studio 2012 in windows, that produces an exel add-in (xll) and run from excel by calling cutsom functions. Some algorithms in the library are multi-threaded (using the standard threading library from ...
TimP (Intel)Ven, Maggio 31st 2013 - 9:15
inspector out of disk space on /home3
Inspector is causing linux (rhel6.2 x86_64) to report out of disk space on /home and stopping with internal error. I don't see any explicit indication of where it is writing data.  Only /home reports full but I don't see where it may have written data. After inspector quits /home reports only 3% ...
danielsueMar, Maggio 21st 2013 - 10:21
Data race in Pardiso Solver?3
Hi All, I ran into a tricky problem when test data race for my codes. The Intel Inspector XE 2013 shows that there is data race in the following calling: 282    !C.. Factorization. 283          phase = 22 ! only factorization 284          CALL pardiso (pt, maxfct, mnum, mtype, phase, n, a, ia, ja ...

Pagine

Iscriversi a Forum
  • Will Intel Inspector XE 2013 find all memory and threading errors in my program?
  • Though it is likely that Intel Inspector XE 2013 can find any memory or threading errors present in the code paths exercised in applications when run at the highest levels of analysis, there is no guarantee that Intel Inspector XE 2013 will find all memory and threading errors in your program.

  • I have memory checking, thread checking and static analysis installed on my machine. In which order do you recommend using the tools during the development process so I make the best use of the product?
  • We recommend starting with static analysis to remove as many issues as possible at compilation time and, then move to memory checking to find and fix memory issues and finally, to thread checking to find and fix threading issues which are usually hard to find and fix. If the application has race conditions, it’s possible that a fix for an incorrect access found by memory checking could be accomplished by resolving the race condition, which can only be detected by thread checking. It might also be the case that when running under memory checking, because it can alter scheduling and timing, a latent deadlock in the code might occur. Fixing the deadlock issue (which may be reported by thread checking), would enable a full run of the application under memory checking.

  • Do I have to recompile and rebuild my programs to use Intel® Inspector XE 2013?
  • No. Intel® Inspector XE 2013 memory checking and thread checking tools instrument and analyze your program binaries dynamically. You don’t need to recompile or rebuild your programs. We recommend use of debug binaries or release binaries with debug information, so that error reports can be attributed to source code locations.

    Static analysis operates differently. See our static analysis page for details.

  • Does Intel® Inspector XE 2013 thread checking analysis and memory checking analysis run in a separate process?
  • No, they are injected into your program’s address space at runtime.

  • Can Intel® Inspector XE 2013 attach to or detach from my running process?
  • No, the current Intel® Inspector XE 2013 does not support process attach or detach. In order to find multithreaded bugs in your process, Intel® Inspector XE 2013 has to monitor memory initialization events (memory checking) or synchronization events (thread checking) from the start of the program.

    Of course, you can always stop Intel® Inspector XE 2013 manually at any time after analysis starts.

  • What is the interactive debugging feature?
  • The Intel® Inspector XE 2013 interactive debugging feature allows you to use a standard debugger to investigate memory or threading problems found by Intel® Inspector XE 2013. It supports Microsoft* Visual Studio 2008 & Visual Studio 2010 debugger (Microsoft* Visual Studio 2012 support is coming) on Windows* OS and the Intel and GNU debuggers on Linux* OS.

  • Can’t we can simply start an analysis and attach a debugger to it?
  • It’s not that simple. Intel® Inspector XE 2013 does a binary runtime analysis of your application, which means there is analysis code executing part of the time, not just your application’s code. You can attach a debugger to this, but you would be looking at the analysis tool’s code much of the time and learn nothing about the problem the tool reported was in your code.

  • Why would I want to do debug simultaneously with an analysis session when the Intel® Inspector XE 2013 problem report gives me the code location (I can run the application under the debugger the way I always have and set a code breakpoint.)?
  • When debugging without memory or threading analysis, a code breakpoint will stop execution at the right location, but that location might be executed thousands of times before the conditions are right that resulted in the problem being reported. By combining debug with analysis, the tool does the work of determining when the problem conditions have occurred and stops at the right time as well as location.

  • Where do I find the debug feature?
  • On the Windows* OS when integrated with the Microsoft Visual Studio* IDE, the debug feature is accessible at two points: from the context-sensitive menu when viewing the list of problems in a result and when setting up a new analysis. On the Linux* OS when using the Intel® Inspector XE 2013 Standalone GUI, the debug feature is accessible in the same manner.

    It is also available from the Linux* command line using the –appdebug or –debug-this options on the –collect action. Debugging during analysis is not available from the Intel® Inspector XE 2013 Standalone GUI or command line interface on the Windows* OS.

  • When would I want to debug during an analysis?
  • The most likely reason to use debug during an analysis is after you have examined the call stacks and code surrounding a particular memory or threading problem reported by Intel® Inspector XE 2013 and find you need more information to determine the cause, such as what the application’s variables hold at that point or what’s happening in other threads. Selecting Debug This Problem on the problem of interest returns you to that point of execution as quickly as possible since the analysis being done can be reduced in many cases.

    Perhaps you want to check for errors in a particular section of an application that takes a long time to execute and the exclusion options do not provide the granularity level you’d like. You can reduce the time it takes to execute to the point within a module where you want error checking to begin by setting a code breakpoint and starting the run with the analysis off. When checking for threading errors, this technique is only efficient if the area chosen for analysis is quite small compared to the overall execution time when under analysis. Threading analysis optimization cannot be done during an analysis with debug enabled, leading to extremely slow execution. Running the complete analysis without debug may be faster than using the debug method to limit the area being analyzed. Checking for memory errors does not have this issue.

    If you are looking for memory errors in an application for the first time and want the ability to debug in each problem as it is reported, then enabling the debugger with analysis from the start is what you want. As each memory problem is detected, execution will stop and you can look at the program state with the debugger or simply continue execution. In general, do not use this with threading analysis because the analysis optimizations cannot be done when debugging, as mentioned above, making execution too slow.

  • Why can’t I use Debug This Problem on memory or resource leaks (or, Why didn’t a debug analysis run stop at the memory or resource leak problems that were reported)?
  • A leak occurs when memory or other resources were not released during execution of the application, hence they are not reported until after the application exits. Therefore, leaks would not result in breakpoints during execution.

  • Why is execution so slow when doing threading analysis with a debugger (or, I waited an hour and never reached a breakpoint when it normally completes the entire analysis in that time)?
  • For debugging to be effective, execution needs to halt at the point a problem occurred. In order to do that, the optimizations employed in threading analysis must be disabled. The result is extremely slow execution of thread checking when done in conjunction with debugging. To make debugging feasible, the level of analysis and location where it is done must be limited. When a problem is selected and Debug This Problem is used, those limitations are applied automatically. If the debug options are used when starting a threading analysis, care must be taken in which level of analysis is used and where analysis begins. Data race detection causes the worst slow down.

  • Why does Intel® Inspector XE 2013 memory checking or thread checking report different errors in two different runs with the same executable binaries and the same input?
  • Memory checking and thread checking perform dynamic analysis. In addition to the executable binaries and the input, the scheduling of the threads and the execution path also affect which issues the tools can find and report. Even when the executable binaries and the input are the same, the thread scheduling and the execution paths can be different from run to run.

  • My program works fine without Intel® Inspector XE 2013, but it crashes when running under Intel® Inspector XE 2013. Is there a bug in the product causing my program to crash?
  • The crash could be caused by a bug in your program or due to a bug in the tool. A latent bug in your program that did not appear when the program ran without the tool, could appear when running under the tool. The tool perturbs the program execution so the scheduling of the applications’ threads can be different with and without the tool. In addition, on the Windows* OS, the memory checking uses a fill pattern to mark uninitialized memory. If an application uses this uninitialized memory, a crash is possible. In this case, the last diagnostic produced by the memory checking would be an uninitialized read.

    Since Intel® Inspector XE 2013 analysis tools execute in the program’s address space, a bug in the tool that can crash the tool will also crash the program.

  • How do I know my program was crashed by a bug in my program or a bug in your product?
  • If your program crashes under thread checking, the product prints a message telling you if the crash is due to a bug in your code or a bug in the product. If the crash is due to a bug in your code, the message also points you to the crash location. If the crash is due to a bug in the product, the message will ask you to contact customer support.

    If your program crashes under memory checking, the last diagnostic generated may point to a problem in your program. If the problem is with the memory checking tools, the current product is not able to detect where the bug is. Please contact customer support to get help.

  • Is thread checking capable of finding potential errors in my program?
  • It depends on the scope of the potential errors. Thread checking analysis is dynamic, and only finds errors in the code that is executed. It does not detect errors in any code that is not executed. In the executed code, thread checking is able to find potential errors like data races, cross thread stack accesses and potential deadlocks. This is why thread checking sometimes reports errors in your program even if your program produces correct output.

  • Will thread checking find logical errors such as atomicity violations in my program, for example, 2 memory accesses that should be in the same critical section are in 2 different critical sections?
  • No, thread checking in current product releases does not detect logical errors such as atomicity violations.

  • For parallel programs, does threading (or memory) analysis run in parallel? In other words, does analysis make use of available multi-core hardware?
  • Yes. Both memory checking and threading checking perform analysis on available cores or hardware threads utilized by the target parallel program. In general, the analysis overhead scales nicely and is similar to the scaling factor seen by the target application.

  • Do I have to run thread checking on a multi-core machine? I use a single processor and single-core machine for my development. Can I still use thread checking to find bugs in my code?
  • Intel® Inspector XE 2013 is capable of detecting threading errors even on single-core machines. You don’t have to run thread checking on a multi-core machine as long as your program uses multiple threads. If your program creates threads explicitly using Windows* or POSIX* threading APIs, you don’t have issues with creating multiple threads on a single-processor and single-core machine. If your program uses Intel® Threading Building Blocks (Intel® TBB), OpenMP* pragmas, Intel® Cilk™ Plus, or another task or threading model that normally creates threads based on the number of available cores on the machine, you need to force the underlying threading model to create multiple threads.

    Of course, you will get better performance if you have a multi-core machine.

  • Intel® Inspector XE 2013 slows down my application significantly under memory checking and thread checking analysis. How can I make it faster?
  • You can reduce your data sets to make memory checking and thread checking run faster. As dynamic analysis tools, memory checking and thread checking detect errors on the code paths executed. As long as the execution paths are preserved, the size of data sets does not matter to analysis. Smaller data sets, however, reduce analysis workload and can boost analysis performance significantly.
    Smaller data sets also reduce memory consumption by memory checking and thread checking tools, resulting in better performance. Furthermore, with thread checking, reduced memory consumption allows the tool to store more memory history information and to detect errors that can be missed when memory space is too tight and some memory history information has to be recycled in order for the analysis to continue.

  • I am already using the smallest data sets, but thread checking is still slow with my application. How can I make it run faster?
  • To make thread checking run faster, you need to create your own analysis settings and have one or more of the following in your settings.

    • Turn on only one type of checking at a time. For example, if you suspect you have a data race, turn on data race detection only but turn deadlock detection off, especially when there are lots of locks created in the program. If you suspect your program has a deadlock or lock hierarchy violation issue, try with only deadlock detection turned on.Turn off capturing the first access call stack using option -no-save-stack-on-first-access. Capturing the first access stack is expensive in terms of both time and space.
    • Turn off capturing allocation call stacks using option -no-save-stack-on-allocation. Capturing the allocation call stack, especially in C++ programs with lots of objects allocated, is expensive in terms of both time and space.
    • Reduce the number of levels of saved call stacks using the option -stack-depth. The deeper the call stack, the more memory space it takes and the more time to track the stack.
    • Exclude modules you do not want to analyze with the option -exclude-module.
    • Divide modules into several small sets. Analyze one set of modules at a time
  • Thread checking reports cross thread stack access warnings. What exactly are cross thread stack accesses? Should I worry about them? What do I do with them?
  • Usually, a thread’s stack is private and should not be shared. In case a thread’s stack needs to be shared, the thread owning the stack and the thread accessing the stack need to coordinate on the accesses.

    A cross thread stack access occurs when a thread touches a different thread’s stack when both threads are alive. This can happen when a thread publishes its stack address to other threads intentionally or accidentally, or when a thread’s stack overflows, especially when the thread’s stack is supplied by the user instead of the system. A thread touching a different thread’s stack can potentially corrupt the other thread’s stack or read garbage from it if the accesses by both threads are not well coordinated.

    A cross thread stack access is a different kind of issue from data race. A data race on a thread’s stack is a cross thread stack access, but a cross thread stack access is not necessarily a data race. The access can be well synchronized and there is no data race but the access can still be a correctness issue. The accessing thread can still potentially corrupt the other thread’s stack or read garbage from it. Synchronization does not always guarantee that cross thread stack access is safe.

    Intel® Inspector XE 2013 does not understand the logic of the program, so it cannot tell unsafe cross thread stack accesses from safe cross thread stack accesses. Therefore, it reports cross thread stack accesses whenever a thread access may potentially access a different thread’s stack. It is up to the user to determine if the access is intended and safe.

  • Why does thread checking report cross thread access warnings in my OpenMP* code or Intel® TBB programs even though I do not have threads explicitly share stacks and I believe my programs behave correctly?
  • Thread checking may report cross thread access warnings in OpenMP* code or Intel® TBB programs even if the user does not have threads share stacks explicitly. This is because OpenMP* threads or Intel® TBB threads can share stack memory internally. However, as mentioned before, Intel® Inspector XE 2013 does not understand the logic of the program so it reports the cross thread stack access warnings.

  • I am using third-party code in my development. Can Intel® Inspector XE 2013 exclude the third-party binaries and focus on my code?
  • Yes, you can specify the modules to be excluded in the GUI or command line for thread checking and memory checking.

    However, this is not recommended for memory checking. Uninitialized memory or bad pointers can be passed into third-party libraries, and their use may not be detected if the third-party libraries were excluded. In cases like these, the problem is not in the third-party library.

  • I don’t mind analyzing third-party modules but I don’t want to see problems in them. Can you hide problems in third-party binaries?
  • Yes, you can create suppression rules for such problems. For subsequent analysis of that project, Intel® Inspector XE 2013 will still analyze those binaries, but problems in those modules will not appear in the result.
    A new rule can be created from the GUI by clicking on the Suppress… item in the context menu on the Code Locations pane. You can select the Any… checkboxes to apply the same rule to a bigger set of problems.
    Existing suppression rules are shown on the Intel® Inspector XE 2013 Project Properties > Suppressions tab.
    As an alternative, you can exclude third-party modules from analysis completely. Excluding third-party modules from analysis also benefits performance. However, excluding third-party modules is not recommended for memory checking as described above.

  • I am developing a plug-in module. How can I use Intel® Inspector XE 2013 to analyze it?
  • To analyze a plug-in module, you need to run the application that loads and executes the plug-in module under Intel® Inspector XE 2013. You can use the module include or exclude options to have Intel® Inspector XE 2013 only analyze the plug-in module.

  • I have my own synchronization or memory management APIs. Can I still use Intel® Inspector XE 2013?
  • Without additional annotations, Intel® Inspector XE 2013 may report false positives when analyzing applications containing custom memory management API or custom synchronization primitives.

    Intel® Inspector XE 2013 provides a set of APIs to allow you to annotate your source code to notify the analysis of your synchronization and memory management APIs.

  • Is memory checking capable of finding potential errors in my program?
  • No. Memory checking only detects errors that occur during the analysis run of your program.

  • Are all leaks reported actually problems? My program allocates heap memory and because the allocated memory is reclaimed by the operating system when the program terminates, why does Intel® Inspector XE 2013 still report leaks?
  • Heap memory that has not been freed, and is not reachable, is reported as leaked at program termination. Reachability is determined by scanning global memory to find references to heap memory and then checking those memory regions, and so on, for further references.

    In some circumstances, Intel® Inspector XE 2013 may report false positives or not report real problems. For example,
    - Intel® Inspector XE 2013 may report false positives if the analyzed application uses custom memory management APIs and you do not annotate your source code to notify the analysis of your custom allocators.
    - Intel® Inspector XE 2013 may report a false memory leak for an object that is located in global memory if its destructor does not execute until late in the shutdown process.
    - Intel® Inspector XE 2013 uses some heuristics to eliminate false positives that may hide real issues.

  • I got dozens of problems, where do I start?
  • First, use the Filters pane to focus on a particular module, source file or problem type. Then pick one problem from Problems pane and look at Code Locations pane. There you will see stacks for these code locations which can also help you to identify the problem. For problems related to a sequence of particular events (e.g. deadlocks) you might want to look at the Timeline pane which will show you distribution of this problem in time. Finally, try to double-click on interesting code locations to switch to the Sources window.

  • How is a “problem set” formed exactly?
  • Every issue detected by the tool has at least one source stack associated with it. Some of these stacks may be more important than others, for example the two stacks of access associated with the threads that accessed the data in a data race are more important to resolving that problem than the stack of allocation (where the allocation occurred) of the object raced on. If two important stacks from two different issues of the same kind have the same “best” location, they are considered as observing the same location. Any two problems that share a location this way are considered to be part of the same problem set. Another way to think of this is that each problem set is a spanning tree of locations for one kind of issue.
    The best location in a given stack is found using a heuristic that attempts to find the most basic stack location that is in the actual user code. Most of the time this works, but sometimes the best locations found may be in a user-written library or another low-level library that the user has source code for.

  • Can Intel® Inspector XE 2013 analyze a release optimized binary?
  • Yes, you can analyze a release optimized binary under Intel® Inspector XE 2013. However, there is no guarantee that Intel® Inspector XE 2013 will report the same issues as with a debug non-optimized binary and there is no guarantee that Intel® Inspector XE 2013 will show source lines or correct source lines. In addition, if the release build is not built with debug information, Intel® Inspector XE 2013 is unlikely to find as many problems as in a debug non-optimized build and in the case of memory checking, may report incorrect problems.

  • I have source files and symbol files somewhere but Intel® Inspector XE 2013 cannot find them. Is there any way I can tell Intel® Inspector XE 2013 where to find source and symbol files?
  • Yes, you can specify additional search directories on the Search tabs of the Intel Inspector XE 2013 Project Properties dialog box. For results created outside of the GUI, you need to create a project to configure these folders. If you are using the Microsoft Visual Studio* IDE, Intel® Inspector XE 2013 automatically retrieves additional search directories from your Visual Studio* project.

  • Will Intel Inspector XE 2013 find all memory and threading errors in my program?
  • Though it is likely that Intel Inspector XE 2013 can find any memory or threading errors present in the code paths exercised in applications when run at the highest levels of analysis, there is no guarantee that Intel Inspector XE 2013 will find all memory and threading errors in your program.

  • Do I have to recompile and rebuild my programs to use Intel® Inspector XE 2013?
  • No. Intel® Inspector XE 2013 memory checking and thread checking tools instrument and analyze your program binaries dynamically. You don’t need to recompile or rebuild your programs. We recommend use of debug binaries or release binaries with debug information, so that error reports can be attributed to source code locations.

    Static analysis operates differently. See our static analysis page for details.

  • Does Intel® Inspector XE 2013 thread checking analysis and memory checking analysis run in a separate process?
  • No, they are injected into your program’s address space at runtime.

  • Can Intel® Inspector XE 2013 attach to or detach from my running process?
  • No, the current Intel® Inspector XE 2013 does not support process attach or detach. In order to find multithreaded bugs in your process, Intel® Inspector XE 2013 has to monitor memory initialization events (memory checking) or synchronization events (thread checking) from the start of the program.

    Of course, you can always stop Intel® Inspector XE 2013 manually at any time after analysis starts.

  • Why does Intel® Inspector XE 2013 memory checking or thread checking report different errors in two different runs with the same executable binaries and the same input?
  • Memory checking and thread checking perform dynamic analysis. In addition to the executable binaries and the input, the scheduling of the threads and the execution path also affect which issues the tools can find and report. Even when the executable binaries and the input are the same, the thread scheduling and the execution paths can be different from run to run.

  • My program works fine without Intel® Inspector XE 2013, but it crashes when running under Intel® Inspector XE 2013. Is there a bug in the product causing my program to crash?
  • The crash could be caused by a bug in your program or due to a bug in the tool. A latent bug in your program that did not appear when the program ran without the tool, could appear when running under the tool. The tool perturbs the program execution so the scheduling of the applications’ threads can be different with and without the tool. In addition, on the Windows* OS, the memory checking uses a fill pattern to mark uninitialized memory. If an application uses this uninitialized memory, a crash is possible. In this case, the last diagnostic produced by the memory checking would be an uninitialized read.

    Since Intel® Inspector XE 2013 analysis tools execute in the program’s address space, a bug in the tool that can crash the tool will also crash the program.

  • How do I know my program was crashed by a bug in my program or a bug in your product?
  • If your program crashes under thread checking, the product prints a message telling you if the crash is due to a bug in your code or a bug in the product. If the crash is due to a bug in your code, the message also points you to the crash location. If the crash is due to a bug in the product, the message will ask you to contact customer support.

    If your program crashes under memory checking, the last diagnostic generated may point to a problem in your program. If the problem is with the memory checking tools, the current product is not able to detect where the bug is. Please contact customer support to get help.

  • For parallel programs, does threading (or memory) analysis run in parallel? In other words, does analysis make use of available multi-core hardware?
  • Yes. Both memory checking and threading checking perform analysis on available cores or hardware threads utilized by the target parallel program. In general, the analysis overhead scales nicely and is similar to the scaling factor seen by the target application.

  • I am developing a plug-in module. How can I use Intel® Inspector XE 2013 to analyze it?
  • To analyze a plug-in module, you need to run the application that loads and executes the plug-in module under Intel® Inspector XE 2013. You can use the module include or exclude options to have Intel® Inspector XE 2013 only analyze the plug-in module.

  • I got dozens of problems, where do I start?
  • First, use the Filters pane to focus on a particular module, source file or problem type. Then pick one problem from Problems pane and look at Code Locations pane. There you will see stacks for these code locations which can also help you to identify the problem. For problems related to a sequence of particular events (e.g. deadlocks) you might want to look at the Timeline pane which will show you distribution of this problem in time. Finally, try to double-click on interesting code locations to switch to the Sources window.

  • How is a “problem set” formed exactly?
  • Every issue detected by the tool has at least one source stack associated with it. Some of these stacks may be more important than others, for example the two stacks of access associated with the threads that accessed the data in a data race are more important to resolving that problem than the stack of allocation (where the allocation occurred) of the object raced on. If two important stacks from two different issues of the same kind have the same “best” location, they are considered as observing the same location. Any two problems that share a location this way are considered to be part of the same problem set. Another way to think of this is that each problem set is a spanning tree of locations for one kind of issue.
    The best location in a given stack is found using a heuristic that attempts to find the most basic stack location that is in the actual user code. Most of the time this works, but sometimes the best locations found may be in a user-written library or another low-level library that the user has source code for.

  • Can Intel® Inspector XE 2013 analyze a release optimized binary?
  • Yes, you can analyze a release optimized binary under Intel® Inspector XE 2013. However, there is no guarantee that Intel® Inspector XE 2013 will report the same issues as with a debug non-optimized binary and there is no guarantee that Intel® Inspector XE 2013 will show source lines or correct source lines. In addition, if the release build is not built with debug information, Intel® Inspector XE 2013 is unlikely to find as many problems as in a debug non-optimized build and in the case of memory checking, may report incorrect problems.

  • I have source files and symbol files somewhere but Intel® Inspector XE 2013 cannot find them. Is there any way I can tell Intel® Inspector XE 2013 where to find source and symbol files?
  • Yes, you can specify additional search directories on the Search tabs of the Intel Inspector XE 2013 Project Properties dialog box. For results created outside of the GUI, you need to create a project to configure these folders. If you are using the Microsoft Visual Studio* IDE, Intel® Inspector XE 2013 automatically retrieves additional search directories from your Visual Studio* project.

  • Will Intel Inspector XE 2013 find all memory and threading errors in my program?
  • Though it is likely that Intel Inspector XE 2013 can find any memory or threading errors present in the code paths exercised in applications when run at the highest levels of analysis, there is no guarantee that Intel Inspector XE 2013 will find all memory and threading errors in your program.

  • Do I have to recompile and rebuild my programs to use Intel® Inspector XE 2013?
  • No. Intel® Inspector XE 2013 memory checking and thread checking tools instrument and analyze your program binaries dynamically. You don’t need to recompile or rebuild your programs. We recommend use of debug binaries or release binaries with debug information, so that error reports can be attributed to source code locations.

    Static analysis operates differently. See our static analysis page for details.

  • Does Intel® Inspector XE 2013 thread checking analysis and memory checking analysis run in a separate process?
  • No, they are injected into your program’s address space at runtime.

  • Can Intel® Inspector XE 2013 attach to or detach from my running process?
  • No, the current Intel® Inspector XE 2013 does not support process attach or detach. In order to find multithreaded bugs in your process, Intel® Inspector XE 2013 has to monitor memory initialization events (memory checking) or synchronization events (thread checking) from the start of the program.

    Of course, you can always stop Intel® Inspector XE 2013 manually at any time after analysis starts.

  • Why does Intel® Inspector XE 2013 memory checking or thread checking report different errors in two different runs with the same executable binaries and the same input?
  • Memory checking and thread checking perform dynamic analysis. In addition to the executable binaries and the input, the scheduling of the threads and the execution path also affect which issues the tools can find and report. Even when the executable binaries and the input are the same, the thread scheduling and the execution paths can be different from run to run.

  • My program works fine without Intel® Inspector XE 2013, but it crashes when running under Intel® Inspector XE 2013. Is there a bug in the product causing my program to crash?
  • The crash could be caused by a bug in your program or due to a bug in the tool. A latent bug in your program that did not appear when the program ran without the tool, could appear when running under the tool. The tool perturbs the program execution so the scheduling of the applications’ threads can be different with and without the tool. In addition, on the Windows* OS, the memory checking uses a fill pattern to mark uninitialized memory. If an application uses this uninitialized memory, a crash is possible. In this case, the last diagnostic produced by the memory checking would be an uninitialized read.

    Since Intel® Inspector XE 2013 analysis tools execute in the program’s address space, a bug in the tool that can crash the tool will also crash the program.

  • How do I know my program was crashed by a bug in my program or a bug in your product?
  • If your program crashes under thread checking, the product prints a message telling you if the crash is due to a bug in your code or a bug in the product. If the crash is due to a bug in your code, the message also points you to the crash location. If the crash is due to a bug in the product, the message will ask you to contact customer support.

    If your program crashes under memory checking, the last diagnostic generated may point to a problem in your program. If the problem is with the memory checking tools, the current product is not able to detect where the bug is. Please contact customer support to get help.

  • For parallel programs, does threading (or memory) analysis run in parallel? In other words, does analysis make use of available multi-core hardware?
  • Yes. Both memory checking and threading checking perform analysis on available cores or hardware threads utilized by the target parallel program. In general, the analysis overhead scales nicely and is similar to the scaling factor seen by the target application.

  • I am developing a plug-in module. How can I use Intel® Inspector XE 2013 to analyze it?
  • To analyze a plug-in module, you need to run the application that loads and executes the plug-in module under Intel® Inspector XE 2013. You can use the module include or exclude options to have Intel® Inspector XE 2013 only analyze the plug-in module.

  • Is memory checking capable of finding potential errors in my program?
  • No. Memory checking only detects errors that occur during the analysis run of your program.

  • Are all leaks reported actually problems? My program allocates heap memory and because the allocated memory is reclaimed by the operating system when the program terminates, why does Intel® Inspector XE 2013 still report leaks?
  • Heap memory that has not been freed, and is not reachable, is reported as leaked at program termination. Reachability is determined by scanning global memory to find references to heap memory and then checking those memory regions, and so on, for further references.

    In some circumstances, Intel® Inspector XE 2013 may report false positives or not report real problems. For example,
    - Intel® Inspector XE 2013 may report false positives if the analyzed application uses custom memory management APIs and you do not annotate your source code to notify the analysis of your custom allocators.
    - Intel® Inspector XE 2013 may report a false memory leak for an object that is located in global memory if its destructor does not execute until late in the shutdown process.
    - Intel® Inspector XE 2013 uses some heuristics to eliminate false positives that may hide real issues.

  • I got dozens of problems, where do I start?
  • First, use the Filters pane to focus on a particular module, source file or problem type. Then pick one problem from Problems pane and look at Code Locations pane. There you will see stacks for these code locations which can also help you to identify the problem. For problems related to a sequence of particular events (e.g. deadlocks) you might want to look at the Timeline pane which will show you distribution of this problem in time. Finally, try to double-click on interesting code locations to switch to the Sources window.

  • How is a “problem set” formed exactly?
  • Every issue detected by the tool has at least one source stack associated with it. Some of these stacks may be more important than others, for example the two stacks of access associated with the threads that accessed the data in a data race are more important to resolving that problem than the stack of allocation (where the allocation occurred) of the object raced on. If two important stacks from two different issues of the same kind have the same “best” location, they are considered as observing the same location. Any two problems that share a location this way are considered to be part of the same problem set. Another way to think of this is that each problem set is a spanning tree of locations for one kind of issue.
    The best location in a given stack is found using a heuristic that attempts to find the most basic stack location that is in the actual user code. Most of the time this works, but sometimes the best locations found may be in a user-written library or another low-level library that the user has source code for.

  • Can Intel® Inspector XE 2013 analyze a release optimized binary?
  • Yes, you can analyze a release optimized binary under Intel® Inspector XE 2013. However, there is no guarantee that Intel® Inspector XE 2013 will report the same issues as with a debug non-optimized binary and there is no guarantee that Intel® Inspector XE 2013 will show source lines or correct source lines. In addition, if the release build is not built with debug information, Intel® Inspector XE 2013 is unlikely to find as many problems as in a debug non-optimized build and in the case of memory checking, may report incorrect problems.

  • I have source files and symbol files somewhere but Intel® Inspector XE 2013 cannot find them. Is there any way I can tell Intel® Inspector XE 2013 where to find source and symbol files?
  • Yes, you can specify additional search directories on the Search tabs of the Intel Inspector XE 2013 Project Properties dialog box. For results created outside of the GUI, you need to create a project to configure these folders. If you are using the Microsoft Visual Studio* IDE, Intel® Inspector XE 2013 automatically retrieves additional search directories from your Visual Studio* project.

  • I have memory checking, thread checking and static analysis installed on my machine. In which order do you recommend using the tools during the development process so I make the best use of the product?
  • We recommend starting with static analysis to remove as many issues as possible at compilation time and, then move to memory checking to find and fix memory issues and finally, to thread checking to find and fix threading issues which are usually hard to find and fix. If the application has race conditions, it’s possible that a fix for an incorrect access found by memory checking could be accomplished by resolving the race condition, which can only be detected by thread checking. It might also be the case that when running under memory checking, because it can alter scheduling and timing, a latent deadlock in the code might occur. Fixing the deadlock issue (which may be reported by thread checking), would enable a full run of the application under memory checking.

  • Do I have to recompile and rebuild my programs to use Intel® Inspector XE 2013?
  • No. Intel® Inspector XE 2013 memory checking and thread checking tools instrument and analyze your program binaries dynamically. You don’t need to recompile or rebuild your programs. We recommend use of debug binaries or release binaries with debug information, so that error reports can be attributed to source code locations.

    Static analysis operates differently. See our static analysis page for details.

  • What is the interactive debugging feature?
  • The Intel® Inspector XE 2013 interactive debugging feature allows you to use a standard debugger to investigate memory or threading problems found by Intel® Inspector XE 2013. It supports Microsoft* Visual Studio 2008 & Visual Studio 2010 debugger (Microsoft* Visual Studio 2012 support is coming) on Windows* OS and the Intel and GNU debuggers on Linux* OS.

  • Can’t we can simply start an analysis and attach a debugger to it?
  • It’s not that simple. Intel® Inspector XE 2013 does a binary runtime analysis of your application, which means there is analysis code executing part of the time, not just your application’s code. You can attach a debugger to this, but you would be looking at the analysis tool’s code much of the time and learn nothing about the problem the tool reported was in your code.

  • Why would I want to do debug simultaneously with an analysis session when the Intel® Inspector XE 2013 problem report gives me the code location (I can run the application under the debugger the way I always have and set a code breakpoint.)?
  • When debugging without memory or threading analysis, a code breakpoint will stop execution at the right location, but that location might be executed thousands of times before the conditions are right that resulted in the problem being reported. By combining debug with analysis, the tool does the work of determining when the problem conditions have occurred and stops at the right time as well as location.

  • Where do I find the debug feature?
  • On the Windows* OS when integrated with the Microsoft Visual Studio* IDE, the debug feature is accessible at two points: from the context-sensitive menu when viewing the list of problems in a result and when setting up a new analysis. On the Linux* OS when using the Intel® Inspector XE 2013 Standalone GUI, the debug feature is accessible in the same manner.

    It is also available from the Linux* command line using the –appdebug or –debug-this options on the –collect action. Debugging during analysis is not available from the Intel® Inspector XE 2013 Standalone GUI or command line interface on the Windows* OS.

  • When would I want to debug during an analysis?
  • The most likely reason to use debug during an analysis is after you have examined the call stacks and code surrounding a particular memory or threading problem reported by Intel® Inspector XE 2013 and find you need more information to determine the cause, such as what the application’s variables hold at that point or what’s happening in other threads. Selecting Debug This Problem on the problem of interest returns you to that point of execution as quickly as possible since the analysis being done can be reduced in many cases.

    Perhaps you want to check for errors in a particular section of an application that takes a long time to execute and the exclusion options do not provide the granularity level you’d like. You can reduce the time it takes to execute to the point within a module where you want error checking to begin by setting a code breakpoint and starting the run with the analysis off. When checking for threading errors, this technique is only efficient if the area chosen for analysis is quite small compared to the overall execution time when under analysis. Threading analysis optimization cannot be done during an analysis with debug enabled, leading to extremely slow execution. Running the complete analysis without debug may be faster than using the debug method to limit the area being analyzed. Checking for memory errors does not have this issue.

    If you are looking for memory errors in an application for the first time and want the ability to debug in each problem as it is reported, then enabling the debugger with analysis from the start is what you want. As each memory problem is detected, execution will stop and you can look at the program state with the debugger or simply continue execution. In general, do not use this with threading analysis because the analysis optimizations cannot be done when debugging, as mentioned above, making execution too slow.

  • Why can’t I use Debug This Problem on memory or resource leaks (or, Why didn’t a debug analysis run stop at the memory or resource leak problems that were reported)?
  • A leak occurs when memory or other resources were not released during execution of the application, hence they are not reported until after the application exits. Therefore, leaks would not result in breakpoints during execution.

  • Why is execution so slow when doing threading analysis with a debugger (or, I waited an hour and never reached a breakpoint when it normally completes the entire analysis in that time)?
  • For debugging to be effective, execution needs to halt at the point a problem occurred. In order to do that, the optimizations employed in threading analysis must be disabled. The result is extremely slow execution of thread checking when done in conjunction with debugging. To make debugging feasible, the level of analysis and location where it is done must be limited. When a problem is selected and Debug This Problem is used, those limitations are applied automatically. If the debug options are used when starting a threading analysis, care must be taken in which level of analysis is used and where analysis begins. Data race detection causes the worst slow down.

  • Why is execution so slow when doing threading analysis with a debugger (or, I waited an hour and never reached a breakpoint when it normally completes the entire analysis in that time)?
  • For debugging to be effective, execution needs to halt at the point a problem occurred. In order to do that, the optimizations employed in threading analysis must be disabled. The result is extremely slow execution of thread checking when done in conjunction with debugging. To make debugging feasible, the level of analysis and location where it is done must be limited. When a problem is selected and Debug This Problem is used, those limitations are applied automatically. If the debug options are used when starting a threading analysis, care must be taken in which level of analysis is used and where analysis begins. Data race detection causes the worst slow down.

  • Intel® Inspector XE 2013 slows down my application significantly under memory checking and thread checking analysis. How can I make it faster?
  • You can reduce your data sets to make memory checking and thread checking run faster. As dynamic analysis tools, memory checking and thread checking detect errors on the code paths executed. As long as the execution paths are preserved, the size of data sets does not matter to analysis. Smaller data sets, however, reduce analysis workload and can boost analysis performance significantly.
    Smaller data sets also reduce memory consumption by memory checking and thread checking tools, resulting in better performance. Furthermore, with thread checking, reduced memory consumption allows the tool to store more memory history information and to detect errors that can be missed when memory space is too tight and some memory history information has to be recycled in order for the analysis to continue.

  • I am already using the smallest data sets, but thread checking is still slow with my application. How can I make it run faster?
  • To make thread checking run faster, you need to create your own analysis settings and have one or more of the following in your settings.

    • Turn on only one type of checking at a time. For example, if you suspect you have a data race, turn on data race detection only but turn deadlock detection off, especially when there are lots of locks created in the program. If you suspect your program has a deadlock or lock hierarchy violation issue, try with only deadlock detection turned on.Turn off capturing the first access call stack using option -no-save-stack-on-first-access. Capturing the first access stack is expensive in terms of both time and space.
    • Turn off capturing allocation call stacks using option -no-save-stack-on-allocation. Capturing the allocation call stack, especially in C++ programs with lots of objects allocated, is expensive in terms of both time and space.
    • Reduce the number of levels of saved call stacks using the option -stack-depth. The deeper the call stack, the more memory space it takes and the more time to track the stack.
    • Exclude modules you do not want to analyze with the option -exclude-module.
    • Divide modules into several small sets. Analyze one set of modules at a time

  • I am using third-party code in my development. Can Intel® Inspector XE 2013 exclude the third-party binaries and focus on my code?
  • Yes, you can specify the modules to be excluded in the GUI or command line for thread checking and memory checking.

    However, this is not recommended for memory checking. Uninitialized memory or bad pointers can be passed into third-party libraries, and their use may not be detected if the third-party libraries were excluded. In cases like these, the problem is not in the third-party library.

  • I don’t mind analyzing third-party modules but I don’t want to see problems in them. Can you hide problems in third-party binaries?
  • Yes, you can create suppression rules for such problems. For subsequent analysis of that project, Intel® Inspector XE 2013 will still analyze those binaries, but problems in those modules will not appear in the result.
    A new rule can be created from the GUI by clicking on the Suppress… item in the context menu on the Code Locations pane. You can select the Any… checkboxes to apply the same rule to a bigger set of problems.
    Existing suppression rules are shown on the Intel® Inspector XE 2013 Project Properties > Suppressions tab.
    As an alternative, you can exclude third-party modules from analysis completely. Excluding third-party modules from analysis also benefits performance. However, excluding third-party modules is not recommended for memory checking as described above.

  • I have my own synchronization or memory management APIs. Can I still use Intel® Inspector XE 2013?
  • Without additional annotations, Intel® Inspector XE 2013 may report false positives when analyzing applications containing custom memory management API or custom synchronization primitives.

    Intel® Inspector XE 2013 provides a set of APIs to allow you to annotate your source code to notify the analysis of your synchronization and memory management APIs.

Intel® Inspector XE 2013

Getting Started?

Click the Learn tab for guides and links that will quickly get you started.

Get Help or Advice

Search Support Articles
Forums - The best place for timely answers from our technical experts and your peers. Use it even for bug reports.
Support - For secure, web-based, engineer-to-engineer support, visit our Intel® Premier Support web site. Intel Premier Support registration is required.
Download, Registration and Licensing Help - Specific help for download, registration, and licensing questions.

Resources

Release Notes - View Release Notes online!
Intel® Inspector XE 2013 documentation
Documentation for other software products