This documentation is archived and is not being maintained.

Debug Multithreaded Applications in Visual Studio

A thread is a sequence of instructions to which the operating system allocates processor time. Every process that is running in the operating system consists of at least one thread. Processes that have more than one thread are called multithreaded.

Computers with multiple processors, multi-core processors, or hyperthreading processes can run multiple threads at the same time. Parallel processing of multiple threads can greatly improve program performance, but it can also make debugging more difficult because it introduces the need to keep track of multiple threads.

In addition, multithreading introduces some new types of potential bugs. Often, for example, two or more threads have to access the same resource, but only one thread can safely access the resource at a time. Some form of mutual exclusion is necessary to make sure that only one thread is accessing the resource at a time. If mutual exclusion is performed incorrectly, it can create a deadlock condition where no thread can execute. Deadlocks can be a particularly hard problem to debug.

Visual Studio 2012 provides an improved Threads window, the new GPU Threads window, the new Parallel Watch window and other user interface improvements to make multithreaded debugging easier. The best way to learn about the new threading interface features is by doing the walkthroughs. See Walkthrough: Debugging a Multithreaded Application and Walkthrough: Debugging a C++ AMP Application.

Visual Studio also provides powerful breakpoints and tracepoints, which can be very useful when you debug multithreaded applications. You can use breakpoint filters to place breakpoints on individual threads. See Breakpoints: Use Hit Counts, Call Stack Functions, and Conditions to Break When and Where You Want in the Visual Studio Debugger

Debugging a multithreaded application that has a user interface can be especially difficult. In that case, you might consider running the application on a second computer and using remote debugging. For information, see Remote Debugging Setup.

How to: Use the Threads Window

Useful procedures for debugging threads with the Threads window.

How to: Switch to Another Thread While Debugging

Three ways to switch the debugging context to another thread.

How to: Flag and Unflag Threads

Mark or flag threads that you want to give special attention to while debugging.

How to: Set a Thread Name in Native Code

Give your thread a name that you view in the Threads window.

How to: Set a Thread Name in Managed Code

Give your thread a name that you view in the Threads window.

Walkthrough: Debugging a Multithreaded Application.

A guided tour of thread debugging features, with emphasis on features how to Visual Studio 2008.

How to: Debug On a High-Performance Cluster

Techniques for debugging an application that runs on a high-performance cluster.

Tips for Debugging Threads in Native Code

Simple techniques that can be useful for debugging native threads.

Using the Parallel Tasks Window

Shows a list of all the managed or native task objects including their status and other useful info.

Using the Parallel Stacks Window

Shows call stacks of multiple threads (or tasks) in a single view and it also coalesces stack segments that are common amongst the threads (or tasks).

Walkthrough: Debugging a Parallel Application

Walkthrough that shows how to use the Parallel Tasks and Parallel Stacks windows.

How to: Use the Parallel Watch Window

Inspect values and expressions across multiple threads.

How to: Use the GPU Threads Window

Examine and work with threads that are running on the GPU during debugging.

Breakpoints: Use Hit Counts, Call Stack Functions, and Conditions to Break When and Where You Want in the Visual Studio Debugger

Use breakpoint filters when you want to place a breakpoint on an individual threads.

Managed Threading

Threading concepts in .NET Framework programming, including example code.

Multithreading in Components

How to use multithreading in .NET Framework components.

Multithreading Support for Older Code (Visual C++)

Threading concepts and example code for C++ programmers using MFC.

<PAVE OVER> How to: Debug a Remote Cluster Application

Instructions on how to set up remote debugging for an application that runs on a high-performance cluster.