Debug.ListCallStack /AllThreads

One little known feature of the Visual Studio debugger is how to list the callstacks of all threads.

  1. Switch to the Command Window Tab. In the general profile, it defaults to a dockable window in the tab group on the bottom right.
  2. Debug.ListCallStack /AllThreads
  3. Find the thread you want
  4. Debug.SetCurrentThread <index>

Example output:
>Debug.ListCallStack /AllThreads
Callstack for Thread 1 (Thread Id: 4440 (0x1158)):
Index Function
--------------------------------------------------------------------------------
*1 Fibonacci.exe!Fibonacci(void * vn=0x00000001)
2 Fibonacci.exe!Fibonacci(void * vn=0x00000003)
3 Fibonacci.exe!Fibonacci(void * vn=0x00000004)
4 Fibonacci.exe!Fibonacci(void * vn=0x00000005)
5 Fibonacci.exe!Fibonacci(void * vn=0x00000007)
6 Fibonacci.exe!Fibonacci(void * vn=0x00000008)
7 Fibonacci.exe!Fibonacci(void * vn=0x0000000a)
8 Fibonacci.exe!Fibonacci(void * vn=0x0000000c)
9 Fibonacci.exe!Fibonacci(void * vn=0x0000000e)
10 Fibonacci.exe!Fibonacci(void * vn=0x00000010)
11 Fibonacci.exe!Fibonacci(void * vn=0x00000012)
12 Fibonacci.exe!Fibonacci(void * vn=0x00000014)
13 Fibonacci.exe!main()
14 Fibonacci.exe!__tmainCRTStartup()
15 Fibonacci.exe!mainCRTStartup()
16 kernel32.dll!7d4e6e1a()
17 [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]

Callstack for Thread 2 (Thread Id: 4892 (0x131c)):
Index Function
--------------------------------------------------------------------------------
1 ntdll.dll!7d61f1de()
2 [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
3 ntdll.dll!7d627207()
4 ntdll.dll!7d6271a2()
5 ntdll.dll!7d627372()
6 ntdll.dll!7d621818()
7 ntdll.dll!7d62176f()
8 ntdll.dll!7d62717a()
9 msvcr80d.dll!_heap_alloc_dbg(unsigned int nSize=5503884, int nBlockUse=0, const char * szFileName=0x0053fba0, int nLine=1)
10 ntdll.dll!7d626f58()
11 kernel32.dll!7d4dae28()
12 msvcr80d.dll!_decode_pointer(void * codedptr=0x1cfb4445)
13 msvcr80d.dll!__CRTDLL_INIT(void * hDllHandle=0x10200000, unsigned long dwReason=2, void * lpreserved=0x00000000)
14 msvcr80d.dll!_CRTDLL_INIT(void * hDllHandle=0x10200000, unsigned long dwReason=2, void * lpreserved=0x00000000)
15 ntdll.dll!7d610024()
16 ntdll.dll!7d627be5()
17 ntdll.dll!7d627bbf()
18 ntdll.dll!7d627a6b()
19 ntdll.dll!7d61e99d()

Callstack for Thread 3 (Thread Id: 4444 (0x115c)):
Index Function
--------------------------------------------------------------------------------
1 ntdll.dll!7d61c824()
2 [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
3 ntdll.dll!7d62882f()
4 ntdll.dll!7d62887f()
5 ntdll.dll!7d627b28()
6 ntdll.dll!7d627a6b()
7 ntdll.dll!7d61e99d()

>Debug.SetCurrentThread 1