View threads and tasks in the Parallel Stacks window (C#, Visual Basic, C++)

The Parallel Stacks window is useful for debugging multithreaded applications. It has several views:

Use the Parallel Stacks window

To open the Parallel Stacks window, you must be in a debugging session. Select Debug > Windows > Parallel Stacks.

Toolbar controls

The Parallel Stacks window has the following toolbar controls:

Screenshot of Toolbar in Parallel Stacks window.

Icon Control Description
Threads/Tasks combo box Threads/Tasks combo box Switches the view between call stacks of threads and call stacks of tasks. For more information, see Tasks view and Threads view.
Show Only Flagged icon Show Only Flagged Shows call stacks only for the threads that are flagged in other debugger windows, such as the GPU Threads window and the Parallel Watch window.
Toggle Method View icon Toggle Method View Switches between call stack views and Method View. For more information, see Method View.
Auto Scroll to Current icon Auto Scroll To Current Stack Frame Autoscrolls the graph so that the current stack frame is in view. This feature is useful when you change the current stack frame from other windows, or when you hit a new breakpoint in large graphs.
Toggle Zoom icon Toggle Zoom Control Shows or hides the zoom control at the left of the window.

Regardless of the visibility of the zoom control, you can also zoom by pressing Ctrl and turning the mouse wheel, or by pressing Ctrl+Shift++ to zoom in and Ctrl+Shift+- to zoom out.

Screenshot of Toolbar in Parallel Stacks window 2022.

Icon Control Description
Threads/Tasks combo box Threads/Tasks combo box Switches the view between call stacks of threads and call stacks of tasks. For more information, see Tasks view and Threads view.
Show Only Flagged icon Show Only Flagged Shows call stacks only for the threads that are flagged in other debugger windows, such as the GPU Threads window and the Parallel Watch window.
Toggle Method View icon Toggle Method View Switches between call stack views and Method View. For more information, see Method View.
Auto Scroll to Current icon Auto Scroll To Current Stack Frame Autoscrolls the graph so that the current stack frame is in view. This feature is useful when you change the current stack frame from other windows, or when you hit a new breakpoint in large graphs.
Toggle Zoom icon Toggle Zoom Control Shows or hides the zoom control at the left of the window.

Regardless of the visibility of the zoom control, you can also zoom by pressing Ctrl and turning the mouse wheel, or by pressing Ctrl+Shift++ to zoom in and Ctrl+Shift+- to zoom out.
Search icon Search Control With this feature you can easily search through stack frames and then use arrows to navigate between those results.
Save icon Save Control Enables you to save/export the content from the parallel stack window as an image.
External Code icon Show External Code Control Using this feature, you can show/hide the stacks from the external code/libraries.

Stack Frame icons

The following icons provide information about the active and current stack frames in all views:

Icon Description
Yellow arrow Indicates the current location (active stack frame) of the current thread.
Threads icon Indicates the current location (active stack frame) of a non-current thread.
Green arrow Indicates the current stack frame (the current debugger context). The method name is bold wherever it appears.
Icon Description
Yellow arrow Indicates the current location (active stack frame) of the current thread.
Threads icon Indicates the current location (active stack frame) of a non-current thread.
Green arrow Indicates the current stack frame (the current debugger context). The method name is bold wherever it appears.
Status Error Indicates that the current stack frame has Critical status warning such as Deadlock.
Status Excluded Indicates the deadlocked node.
Status Information Indicates that the current stack frame has additional information such as Waiting on, Waiting on lock, owned by, etc.
Status Blocked Indicates that the current task is in blocked/waiting state, etc.
Status Running Indicates that the currently running task.

Context menu items

The following shortcut menu items are available when you right-click a method in Threads view or Tasks view. The last six items are the same as in the Call Stack window.

Screenshot of Shortcut menu in Parallel Stacks window.

Menu item Description
Flag Flags the selected item.
Unflag Unflags the selected item.
Freeze Freezes the selected item.
Thaw Thaws the selected item.
Switch To Frame Same as the corresponding menu command in the Call Stack window. However, in the Parallel Stacks window, one method may be in several frames. You can select the frame you want in the submenu for this item. If one of the stack frames is on the current thread, that frame is selected by default in the submenu.
Go to Task or Go to Thread Switches to the Task or Threads view, and keeps the same stack frame highlighted.
Go To Source Code Goes to the corresponding location in the source code window.
Go To Disassembly Goes to the corresponding location in the Disassembly window.
Show External Code Shows or hides external code.
Hexadecimal Display Toggles between decimal and hexadecimal display.
Show Threads in Source Flags the location of the thread in the source code window.
Symbol Load Information Opens the Symbol Load Information dialog box.
Symbol Settings Opens the Symbol Settings dialog box.

Screenshot of Shortcut menu in Parallel Stacks window 2022.

Menu item Description
Copy Copy the selected item.
Select All Frames Below Selects all the frames under the selected stack.
Flag Flags the selected item.
Unflag Unflags the selected item.
Freeze Freezes the selected item.
Thaw Thaws the selected item.
Switch To Frame Same as the corresponding menu command in the Call Stack window. However, in the Parallel Stacks window, one method may be in several frames. You can select the frame you want in the submenu for this item. If one of the stack frames is on the current thread, that frame is selected by default in the submenu.
Go to Task or Go to Thread Switches to the Task or Threads view, and keeps the same stack frame highlighted.
Go To Source Code Goes to the corresponding location in the source code window.
Go To Disassembly Goes to the corresponding location in the Disassembly window.
Show External Code Shows or hides external code.
Hexadecimal Display Toggles between decimal and hexadecimal display.
Show Threads in Source Flags the location of the thread in the source code window.
Symbol Load Information Opens the Symbol Load Information dialog box.
Symbol Settings Opens the Symbol Settings dialog box.

Threads view

In Threads view, the stack frame and call path of the current thread are highlighted in blue. The current location of the thread is shown by the yellow arrow.

To change the current stack frame, double-click a different method. This might also switch the current thread, depending on whether the method you select is part of the current thread or another thread.

When the Threads view graph is too large to fit into the window, a Bird's Eye View control appears in the window. You can move the frame in the control to navigate to different parts of the graph.

The following illustration shows one thread that goes from Main to a Managed to Native code transition. Six threads are in the current method. One continues to Thread.Sleep, and another continues to Console.WriteLine and then to SyncTextWriter.WriteLine.

Screenshot of Threads view in Parallel Stacks window.

The following table describes the main features of the Threads view:

Callout Element name Description
1 Call stack segment or node Contains a series of methods for one or more threads. If the frame has no arrow lines connected to it, the frame shows the entire call path for the thread(s).
2 Blue highlight Indicates the call path of the current thread.
3 Arrow lines Connect nodes to make up the entire call path for the thread(s).
4 Node header Shows the number of processes and threads for the node.
5 Method Represents one or more stack frames in the same method.
6 Tooltip on method Appears when you hover over a method. In Threads view, the tooltip shows all threads, in a table similar to the Threads window.

The following illustration shows one thread that goes from Main to a Managed to Native code transition. Five threads are in the current method. One continues to ServerClass.InstanceMethod, and another continues to Worker.Thread.Start and then to StartupHook.Initialize.AnonymousMethod.

Screenshot of Threads view in Parallel Stacks window 2022.

The following table describes the main features of the Threads view:

Callout Element name Description
1 Call stack segment or node Contains a series of methods for one or more threads. If the frame has no arrow lines connected to it, the frame shows the entire call path for the thread(s).
2 Blue highlight Indicates the call path of the current thread.
3 Arrow lines Connect nodes to make up the entire call path for the thread(s).
4 Node header Shows the number of processes/threads, thread name, and thread ID for the node.
5 Method Represents one or more stack frames in the same method.
6 Tooltip on method Appears when you hover over a method. In Threads view, the tooltip shows all threads, in a table similar to the Threads window.

Tasks view

If your app uses System.Threading.Tasks.Task objects (managed code) or task_handle objects (native code) to express parallelism, you can use Tasks view. Tasks view shows call stacks of tasks instead of threads.

In Tasks view:

  • Call stacks of threads that aren't running tasks aren't shown.
  • Call stacks of threads that are running tasks are visually trimmed at the top and bottom, to show the most relevant frames for tasks.
  • When several tasks are on one thread, the call stacks of those tasks are shown in separate nodes.

To see an entire call stack, switch back to Threads view by right-clicking in a stack frame and selecting Go to Thread.

The following illustration shows the Threads view at the top and the corresponding Tasks view at the bottom.

Screenshot of Threads and Tasks views.

Screenshot of Tasks view in Parallel Stacks window.

Hover over a method to show a tooltip with additional information. In Tasks view, the tooltip shows all the tasks in a table similar to the Tasks window.

The following image shows the tooltip for a method in the Threads view at the top and for the corresponding Tasks view at the bottom.

Screenshot of Threads and Tasks tooltips.

Screenshot of Threads and Tasks tooltips.

Method View

From either Threads view or Tasks view, you can pivot the graph on the current method by selecting the Toggle Method View icon on the toolbar. Method View shows at a glance all methods on all threads that either call or are called by the current method. The following illustration shows how the same information looks in Threads view on the left and in Method View on the right.

Screenshot of Methods view in Parallel Stacks window.

Screenshot of Methods view in Parallel Stacks window 2022.

If you switch to a new stack frame, you make that method the current method, and Method View shows all callers and callees for the new method. This may cause some threads to appear or disappear from the view, depending on whether that method appears on their call stacks. To return to the call stack view, select the Method View toolbar icon again.

Debug threads and tasks with parallel stacks video tutorial

These video tutorials demonstrate how you can use the Threads and Tasks views of the Parallel Stacks window in Visual Studio 2022 to debug your multithreaded applications.