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
|
Finds Threading Errors
|
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 ThoroughThe 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. |
|
|
|
|
|
|
![]() |
Suppress False Errors, Share with the TeamFalse 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 CollaborationEach 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 ListJust 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. |
|
|
|
Dynamic Instrumentation:
|
Fewer False Positives, Better Error MessagesIntel 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*)
|
Analyze MPI Applications for
|
|
Technical SpecificationsFor additional details, please see the release notes. |
|
|
|
|
|
|
|
|
|
|
|
Videos to help you get started.
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
- Using Intel® Inspector XE with Fortran Applications
-
Note: Video portion will load in about 1 minute, audio will start immediately
Featured Articles
More Tech Articles
10:52 AM PDT
12:28 PM PST
1:32 PM PST
6:19 AM PST
Pagine
Product Documentation and Tutorials
- For Windows*
-
Loading Intel Software Documentation...
- For Linux*
-
Loading Intel Software Documentation...
Supplemental Documentation
6:19 AM PST
7:18 AM PDT
3:51 PM PST
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
Pagine
- 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
Featured Support Topics
Pagine
OS Support
Windows*
Linux*
Languages
C, C++, C#, Fortran
Related Content
Product Brief
Release Notes
Case Studies
Forums
Blogs
Events
Learning Lab
Software EULA
Intel Inspector XE 2013 is Included in these suites:
Intel® Parallel Studio XE 2013
Intel® C++ Studio XE 2013
Intel® Fortran Studio XE 2013
Intel® Cluster Studio XE 2013
Intel® System Studio (incl. Intel Inspector for Systems)











