Debug Your App by Recording Code Execution with IntelliTrace
Spend less time debugging your app in Visual Studio Ultimate when you use IntelliTrace to record and trace your code's execution history. You can find bugs more easily without setting lots of breakpoints because IntelliTrace lets you:
Record specific events that happened in your app.
This lets you examine related code, data that appears in the Locals window during debugger events, and function call info, if you choose to collect it.
Reduce restarting your app to recreate bugs or events.
Debug errors that are hard to reproduce or that happen outside Visual Studio, for example, in production or other environments.
This example shows how recording events can help you find a bug in your code:
Watch IntelliTrace in action: Collecting and analyzing IntelliTrace data for debugging (Channel 9 video).
What do you want to do?
Debug my app with IntelliTrace in Visual Studio:
|
|
Collect IntelliTrace data during a test session in Test Manager |
|
Collect IntelliTrace data from apps running outside Visual Studio |
|
Start debugging from an IntelliTrace log file (.iTrace file). |
FAQ
What apps can I debug with IntelliTrace?
Why debug with IntelliTrace?
What data does IntelliTrace collect?
Will IntelliTrace slow down my app?
What apps can I debug with IntelliTrace?
Supported |
|
Limited support |
|
Not supported |
|
Note
If you want to debug a process that is already running, you can’t use IntelliTrace. You must start IntelliTrace when the process starts.
Why debug with IntelliTrace?
Traditional or live debugging shows only your app's current state with limited data about past events. You either have to infer these events based on the app's current state, or you have to recreate these events by rerunning your app.
IntelliTrace expands this traditional debugging experience by recording specific events and data at these points in time. This lets you see what happened in your app without restarting it, especially if you step past where the bug is. IntelliTrace is turned on by default during traditional debugging and collects data automatically and invisibly. This lets you switch easily between traditional debugging and IntelliTrace debugging to see the recorded information. See Record Code Execution with IntelliTrace for Debugging in Visual Studio and What data does IntelliTrace collect?
IntelliTrace can also help you debug errors that are hard to reproduce or that happen outside Visual Studio. You can collect IntelliTrace data and save it to an IntelliTrace log file (.iTrace file). An .iTrace file contains details about exceptions, threads, Web requests, test data, modules, and other system information. You can open this file in Visual Studio Ultimate, select an item, and start debugging with IntelliTrace. This lets you go to any event in the file and see specific details about your app at that point in time.
You can save IntelliTrace data from these sources:
IntelliTrace session in Visual Studio Ultimate
Test session in Microsoft Test Manager
Apps running outside Visual Studio, for example, in production or other environments
System Center 2012 Service Pack 1 (SP1) - Operations Manager with the IntelliTrace Profiling Management Pack. See How to Configure Integration with IntelliTrace in System Center 2012.
See Debug Your App with IntelliTrace Log (.iTrace) Files.
Here are some examples of how IntelliTrace can help you with debugging:
Your app has corrupted a data file, but you don't know where this event happened.
Without IntelliTrace, you have to look through the code to find all possible file accesses, put breakpoints on those accesses, and rerun your app to find where the problem happened. With IntelliTrace, you can see all the collected file-access events and specific details about your app when each event happened.
An exception happens.
Without IntelliTrace, you get a message about an exception but you don’t have much information about the events that led to the exception. You can examine the call stack to see the chain of calls that led to the exception, but you can’t see the sequence of events that happened during those calls. With IntelliTrace, you can examine the events that happened before the exception.
Your app crashes on a test computer but runs successfully on a development computer.
You can collect IntelliTrace data from Microsoft Test Manager, save the data to an .iTrace file, and attach this file to a Team Foundation Server work item for later investigation. See Including Diagnostic Trace Data with Bugs that are Difficult to Reproduce and Debug Your App with IntelliTrace Log (.iTrace) Files.
A bug or crash happens in your app that is running outside Visual Studio.
For Windows Azure-based apps, you can configure IntelliTrace data collection before you publish the app. While your app runs, IntelliTrace saves data to an .iTrace file. See Debugging a Published Cloud Service with IntelliTrace and Visual Studio.
For managed desktop (.exe) apps, ASP.NET Web apps hosted on IIS 7.0, 7.5, and 8.0, and SharePoint 2010 or SharePoint 2013 applications, you can use the standalone collector to save IntelliTrace data to an .iTrace file.
This is useful when you want to diagnose problems with apps running where you don’t want to change the system configuration, such as a production environment. You can install the collector without changing your system configuration. When you’re done collecting data, just delete the collector to uninstall it. See Collect IntelliTrace Data Outside Visual Studio with the Standalone Collector.
What data does IntelliTrace collect?
Collecting event information
By default, IntelliTrace records only IntelliTrace events. These are debugger events, exceptions, .NET Framework events, and other system events that can help you with debugging. You can choose the kinds of IntelliTrace events that you want to collect, except for debugger events and exceptions, which are always collected. See Configure IntelliTrace Collection for Debugging in Visual Studio.
Debugger events
IntelliTrace always records events that happen in the Visual Studio debugger. For example, starting your app is a debugger event. Other debugger events are stopping events, which cause your app to break execution. For example, your program hits a breakpoint, hits a tracepoint, or executes a Step command.
To help with performance, IntelliTrace doesn't record every possible value for a debugger event. Instead, it records these values:
Values in the Locals window. Keep the Locals window open to see these values.
Values in the Autos window only if the Autos window is open
Values in DataTips that appear when you move the mouse pointer on top of a variable in the source window to see its value. IntelliTrace doesn't collect values in pinned DataTips.
Exceptions
IntelliTrace records the exception type and message for these kinds of exceptions:
Handled exceptions where the exception is thrown and caught
Unhandled exceptions
.NET Framework events
By default, IntelliTrace records the most common .NET Framework events. For example:
For a File Access event, IntelliTrace collects the file name.
For a Check Checkbox event, IntelliTrace collects the checkbox state and text.
SharePoint 2010 and SharePoint 2013 application events
You can record user profile events and a subset of Unified Logging System (ULS) events for SharePoint 2010 and 2013 applications running outside Visual Studio. You can save these events to an .iTrace file. Requires either Visual Studio 2012 Update 2 or the IntelliTrace Collector for Visual Studio.
When you open the .iTrace file, you can enter a SharePoint correlation ID to find its matching web request, view the recorded events, and start debugging from a specific event. If the file contains unhandled exceptions, you can choose a correlation ID to start debugging an exception.
See:
Collecting function call information
You can configure IntelliTrace to collect call information for functions. This information lets you see a history of the call stack and lets you step backward and forward through calls in the code. For each function call, IntelliTrace records this data:
Function name
Values of primitive data types passed as parameters at function entry points and returned at function exit points
Values of automatic properties when they are read or changed
Pointers to first-level child objects, but not their values other than if they were null or not
Note
IntelliTrace collects only the first 256 objects in arrays and the first 256 characters for strings.
See Configure IntelliTrace Collection for Debugging in Visual Studio.
Collecting module information
To control how much call information that IntelliTrace collects, specify only those modules that you care about. This can help improve your app's performance during collection. See Configure IntelliTrace Collection for Debugging in Visual Studio.
Will IntelliTrace slow down my app?
By default, IntelliTrace collects data for selected IntelliTrace events only. This might or might not slow down your app, depending on the structure and organization of your code. For example, if IntelliTrace records an event often, this might slow down your app, but it might also prompt you to consider refactoring your app.
Collecting call information might slow down your app significantly. It might also increase the size of any IntelliTrace log files (.iTrace files) that you’re saving to disk. To minimize these effects, collect call information only for the modules you care about. To change the maximum size of your .iTrace files, go to Tools, Options, IntelliTrace, Advanced. See Configure IntelliTrace Collection for Debugging in Visual Studio.
Where can I get more information?
Record Code Execution with IntelliTrace for Debugging in Visual Studio
Configure IntelliTrace Collection for Debugging in Visual Studio
Including Diagnostic Trace Data with Bugs that are Difficult to Reproduce
Collect IntelliTrace Data Outside Visual Studio with the Standalone Collector
Debug Your App with IntelliTrace Log (.iTrace) Files
Blogs
Visual Studio ALM + Team Foundation Server
Forums
Guidance
Testing for Continuous Delivery with Visual Studio 2012 – Chapter 6: A Testing Toolbox