병렬 스택 창에서 스레드 및 작업 뷰(C#, Visual Basic, C++).

병렬 스택 창은 다중 스레드 애플리케이션을 디버깅할 때 유용합니다. 다음과 같은 여러 뷰가 있습니다.

병렬 스택 창 사용

병렬 스택 창을 열려면 디버깅 세션에 있어야 합니다. 디버그>>병렬 스택을 선택하십시오.

도구 모음 컨트롤

병렬 스택 창에는 다음과 같은 도구 모음 컨트롤이 있습니다.

Screenshot of Toolbar in Parallel Stacks window.

아이콘 컨트롤 설명
Threads/Tasks combo box 스레드/작업 콤보 상자 스레드의 호출 스택과 작업의 호출 스택 간에 뷰를 전환합니다. 자세한 내용은 작업 뷰스레드 뷰를 참조하세요.
Show Only Flagged icon 플래그가 지정된 항목만 표시 GPU 스레드 창 및 병렬 조사식 창 등의 다른 디버거 창에서는 플래그가 지정된 스레드에 대해서만 호출 스택을 표시합니다.
Toggle Method View icon 메서드 뷰 설정/해제 호출 스택 뷰와 메서드 뷰 사이를 전환합니다. 자세한 내용은 메서드 뷰를 참조하세요.
Auto Scroll to Current icon 현재 스택 프레임으로 자동 스크롤 현재 스택 프레임이 뷰에 표시되도록 그래프를 자동 스크롤합니다. 이 기능은 다른 창에서 현재 스택 프레임을 변경하거나 큰 그래프에서 새 중단점을 적중할 때 유용합니다.
Toggle Zoom icon 확대/축소 컨트롤 설정/해제 창 왼쪽에 있는 확대/축소 컨트롤을 표시하거나 숨깁니다.

확대/축소 컨트롤의 표시 여부와 관계없이 Ctrl을 누른 상태에서 마우스 휠을 돌려 확대/축소하거나 Ctrl+Shift++를 눌러 확대하고 Ctrl+Shift+-를 눌러 축소하세요.

Screenshot of Toolbar in Parallel Stacks window 2022.

아이콘 컨트롤 설명
Threads/Tasks combo box 스레드/작업 콤보 상자 스레드의 호출 스택과 작업의 호출 스택 간에 뷰를 전환합니다. 자세한 내용은 작업 뷰스레드 뷰를 참조하세요.
Filter icon 필터 컨트롤 관심 있는 특정 스레드 집합에 대해서만 호출 스택을 표시합니다.
Show Only Flagged icon 플래그가 지정된 항목만 표시 GPU 스레드 창 및 병렬 조사식 창 등의 다른 디버거 창에서는 플래그가 지정된 스레드에 대해서만 호출 스택을 표시합니다.
Toggle Method View icon 메서드 뷰 설정/해제 호출 스택 뷰와 메서드 뷰 사이를 전환합니다. 자세한 내용은 메서드 뷰를 참조하세요.
Auto Scroll to Current icon 현재 스택 프레임으로 자동 스크롤 현재 스택 프레임이 뷰에 표시되도록 그래프를 자동 스크롤합니다. 이 기능은 다른 창에서 현재 스택 프레임을 변경하거나 큰 그래프에서 새 중단점을 적중할 때 유용합니다.
Toggle Zoom icon 확대/축소 컨트롤 설정/해제 창 왼쪽에 있는 확대/축소 컨트롤을 표시하거나 숨깁니다.

확대/축소 컨트롤의 표시 여부와 관계없이 Ctrl을 누른 상태에서 마우스 휠을 돌려서 확대/축소하거나 Ctrl+Shift++를 눌러 확대하고 Ctrl+Shift+-를 눌러 축소하세요.
Search icon 검색 컨트롤 이 기능을 사용하면 스택 프레임을 쉽게 검색한 다음 화살표를 사용하여 해당 결과 간을 탐색할 수 있습니다.
Save icon 저장 컨트롤 병렬 스택 창에서 콘텐츠를 이미지로 저장하거나 내보낼 수 있습니다.
External Code icon 외부 코드 컨트롤 표시 이 기능을 사용하면 외부 코드/라이브러리에서 스택을 표시하거나 숨길 수 있습니다.

스택 프레임 아이콘

다음 아이콘은 모든 뷰의 활성 및 현재 스택 프레임에 대한 정보를 제공합니다.

아이콘 설명
Yellow arrow 현재 스레드의 현재 위치(활성 스택 프레임)를 나타냅니다.
Threads icon 현재가 아닌 스레드의 현재 위치(활성 스택 프레임)를 나타냅니다.
Green arrow 현재 스택 프레임(현재 디버거 컨텍스트)을 나타냅니다. 메서드 이름은 표시되는 위치와 관계없이 굵게 표시됩니다.
아이콘 설명
Yellow arrow 현재 스레드의 현재 위치(활성 스택 프레임)를 나타냅니다.
Threads icon 현재가 아닌 스레드의 현재 위치(활성 스택 프레임)를 나타냅니다.
Green arrow 현재 스택 프레임(현재 디버거 컨텍스트)을 나타냅니다. 메서드 이름은 표시되는 위치와 관계없이 굵게 표시됩니다.
Status Error 현재 스택 프레임에 교착 상태와 같은 위험 상태 경고가 있음을 나타냅니다.
Status Excluded 교착 상태 노드를 나타냅니다.
Status Information 현재 스택 프레임에 대기 중, 잠금 대기, 소유 등과 같은 추가 정보가 있음을 나타냅니다.
Status Blocked 현재 작업이 차단됨/대기 중 상태 등임을 나타냅니다.
Status Running 현재 실행 중인 작업임을 나타냅니다.

컨텍스트 메뉴 항목

스레드 뷰 또는 작업 뷰에서 메서드를 마우스 오른쪽 버튼으로 클릭하면 다음과 같은 바로 가기 메뉴 항목을 사용할 수 있습니다. 마지막 6개 항목은 호출 스택 창과 동일합니다.

Screenshot of Shortcut menu in Parallel Stacks window.

메뉴 항목 설명
플래그 선택한 항목에 플래그를 지정합니다.
플래그 해제 선택한 항목의 플래그를 해제합니다.
중지 선택한 항목을 중지합니다.
재개 선택한 항목을 재개합니다.
프레임으로 전환 호출 스택 창의 해당 메뉴 명령과 동일합니다. 그러나 병렬 스택 창에서는 하나의 메서드가 여러 프레임에 있을 수 있습니다. 이 항목에 대한 하위 메뉴에서 원하는 프레임을 선택할 수 있습니다. 스택 프레임 중 하나가 현재 스레드에 있는 경우, 해당 프레임은 하위 메뉴에서 기본적으로 선택됩니다.
작업으로 이동 또는 스레드로 이동 작업 또는 스레드 뷰로 전환하며, 동일한 스택 프레임을 계속 강조 표시합니다.
소스 코드로 이동 소스 코드 창의 해당 위치로 이동합니다.
디스어셈블리로 이동 디스어셈블리 창의 해당 위치로 이동합니다.
외부 코드 표시 외부 코드를 표시하거나 숨깁니다.
16진수 표시 10진수 표시와 16진수 표시 사이를 전환합니다.
소스의 스레드 표시 소스 코드 창에서 스레드의 위치에 플래그를 지정합니다.
기호 로드 정보 기호 로드 정보 대화 상자를 엽니다.
기호 설정 기호 설정 대화 상자를 엽니다.

Screenshot of Shortcut menu in Parallel Stacks window 2022.

메뉴 항목 설명
복사 선택한 항목을 복사합니다.
아래 프레임 모두 선택 선택되어 있는 스택 아래의 모든 프레임을 선택합니다.
플래그 선택한 항목에 플래그를 지정합니다.
플래그 해제 선택한 항목의 플래그를 해제합니다.
중지 선택한 항목을 중지합니다.
재개 선택한 항목을 재개합니다.
프레임으로 전환 호출 스택 창의 해당 메뉴 명령과 동일합니다. 그러나 병렬 스택 창에서는 하나의 메서드가 여러 프레임에 있을 수 있습니다. 이 항목에 대한 하위 메뉴에서 원하는 프레임을 선택할 수 있습니다. 스택 프레임 중 하나가 현재 스레드에 있는 경우, 해당 프레임은 하위 메뉴에서 기본적으로 선택됩니다.
작업으로 이동 또는 스레드로 이동 작업 또는 스레드 뷰로 전환하며, 동일한 스택 프레임을 계속 강조 표시합니다.
소스 코드로 이동 소스 코드 창의 해당 위치로 이동합니다.
디스어셈블리로 이동 디스어셈블리 창의 해당 위치로 이동합니다.
외부 코드 표시 외부 코드를 표시하거나 숨깁니다.
16진수 표시 10진수 표시와 16진수 표시 사이를 전환합니다.
소스의 스레드 표시 소스 코드 창에서 스레드의 위치에 플래그를 지정합니다.
기호 로드 정보 기호 로드 정보 대화 상자를 엽니다.
기호 설정 기호 설정 대화 상자를 엽니다.

스레드 뷰

스레드 뷰에서 현재 스레드의 스택 프레임 및 호출 경로가 파란색으로 강조 표시됩니다. 스레드의 현재 위치는 노란색 화살표로 표시됩니다.

현재 스택 프레임을 변경하려면 다른 메서드를 더블 클릭합니다. 이를 통해 선택한 메서드가 현재 스레드의 일부인지 아니면 다른 스레드의 일부인지에 따라 현재 스레드가 전환될 수도 있습니다.

스레드 뷰 그래프가 너무 커서 창에 맞지 않는 경우, 창에 개요 보기 컨트롤이 나타납니다. 컨트롤에서 프레임을 이동하여 그래프의 다른 부분으로 이동할 수 있습니다.

다음 그림을 통해 메인에서 관리-네이티브 코드 전환으로 이동하는 하나의 스레드를 볼 수 있습니다. 6개의 스레드가 현재 메서드에 있습니다. 하나는 Thread.Sleep으로 계속하고, 다른 하나는 Console.WriteLine에서 SyncTextWriter.WriteLine으로 계속합니다.

Screenshot of Threads view in Parallel Stacks window.

다음 테이블은 스레드 보기의 주요 기능에 대해 설명합니다.

설명선 제목 요소 이름 설명
1 호출 스택 세그먼트 또는 노드 하나 이상의 스레드에 대한 일련의 메서드를 포함합니다. 프레임에 연결된 화살표 선이 없으면 스레드에 대한 전체 호출 경로를 나타냅니다.
2 파란색 강조 표시 현재 스레드의 호출 경로를 나타냅니다.
3 화살표 선 노드를 연결하여 스레드에 대한 전체 호출 경로를 구성합니다.
4 노드 헤더 노드의 프로세스 및 스레드 수를 표시합니다.
5 메서드 동일한 메서드에 있는 하나 이상의 스택 프레임을 나타냅니다.
6 메서드에 대한 도구 설명 메서드를 가리키면 나타납니다. 스레드 뷰에서 도구 모음은 스레드 창과 유사한 테이블에 모든 스레드를 표시합니다.

다음 그림을 통해 메인에서 관리-네이티브 코드 전환으로 이동하는 하나의 스레드를 볼 수 있습니다. 5개의 스레드가 현재 메서드에 있습니다. 하나는 ServerClass.InstanceMethod로 계속하고, 다른 하나는 Worker.Thread.Start에서 StartupHook.Initialize.AnonymousMethod로 계속합니다.

Screenshot of Threads view in Parallel Stacks window 2022.

다음 테이블은 스레드 보기의 주요 기능에 대해 설명합니다.

설명선 제목 요소 이름 설명
1 호출 스택 세그먼트 또는 노드 하나 이상의 스레드에 대한 일련의 메서드를 포함합니다. 프레임에 연결된 화살표 선이 없으면 스레드에 대한 전체 호출 경로를 나타냅니다.
2 파란색 강조 표시 현재 스레드의 호출 경로를 나타냅니다.
3 화살표 선 노드를 연결하여 스레드에 대한 전체 호출 경로를 구성합니다.
4 노드 헤더 노드의 프로세스/스레드 수, 스레드 이름 및 스레드 ID를 표시합니다.
5 메서드 동일한 메서드에 있는 하나 이상의 스택 프레임을 나타냅니다.
6 메서드에 대한 도구 설명 메서드를 가리키면 나타납니다. 스레드 뷰에서 도구 모음은 스레드 창과 유사한 테이블에 모든 스레드를 표시합니다.

작업 보기

앱이 System.Threading.Tasks.Task 개체(관리 코드) 또는 task_handle 개체(네이티브 코드)를 사용하여 병렬 처리를 표현하는 경우 작업 뷰를 사용할 수 있습니다. 작업 보기는 스레드 대신 작업의 호출 스택이 표시됩니다.

작업 뷰:

  • 작업을 실행하고 있지 않은 스레드의 호출 스택은 표시되지 않습니다.
  • 작업을 실행 중인 스레드의 호출 스택은 맨 위와 맨 아래에서 시각적으로 잘려 작업에 대해 관련성이 가장 높은 프레임을 표시합니다.
  • 여러 작업이 한 스레드에 있는 경우, 이러한 작업의 호출 스택이 개별 노드에 표시됩니다.

전체 호출 스택을 보려면 스택 프레임을 마우스 오른쪽 버튼으로 클릭하고 스레드로 이동을 클릭하여 스레드 뷰로 전환하십시오.

다음 그림은 상단의 스레드 뷰와 하단의 작업 뷰를 보여 줍니다.

Screenshot of Threads and Tasks views.

Screenshot of Tasks view in Parallel Stacks window.

메서드를 마우스로 가리키면 추가 정보가 포함된 도구 설명이 표시됩니다. 작업 뷰의 도구 설명에는 작업 창과 유사한 테이블에 모든 작업이 표시됩니다.

다음 이미지는 상단에 스레드 뷰의 메서드에 대한 도구 설명 및 하단에 해당하는 작업 뷰를 보여 줍니다.

Screenshot of Threads and Tasks tooltips.

Screenshot of Threads and Tasks tooltips.

메서드 뷰

스레드 뷰나 작업 뷰에서 도구 모음의 메서드 뷰 설정/해제 아이콘을 선택하여 현재 메서드를 축으로 그래프를 회전할 수 있습니다. 메서드 뷰에서는 현재 메서드를 호출하거나, 현재 메서드에 의해 호출되는 모든 스레드에 대한 메서드를 모두 한눈에 볼 수 있습니다. 다음 그림에서는 왼쪽의 스레드 뷰와 오른쪽의 메서드 뷰에서 동일한 정보를 표시하는 방법을 보여 줍니다.

Screenshot of Methods view in Parallel Stacks window.

Screenshot of Methods view in Parallel Stacks window 2022.

새 스택 프레임으로 전환하는 경우 해당 메서드는 현재 메서드가 되며, 메서드 뷰는 새 메서드에 대한 모든 호출자 및 호출 수신자를 표시합니다. 이렇게 하면 메서드가 호출 스택에 표시되는지 여부에 따라 일부 스레드가 뷰에 나타나거나 사라집니다. 호출 스택 뷰로 돌아가려면 메서드 뷰 도구 모음 아이콘을 다시 선택합니다.

병렬 스택 비디오 튜토리얼을 사용한 스레드 및 작업 디버그

이 비디오 튜토리얼은 Visual Studio 2022에서 병렬 스택 창의 스레드 및 작업 보기를 사용하여 다중 스레드 애플리케이션을 디버그하는 방법을 보여 줍니다.