다음을 통해 공유


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

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

병렬 스택 창 사용

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

도구 모음 컨트롤

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

병렬 스택 창의 도구 모음 스크린샷

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

확대/축소 컨트롤의 표시 유형에 관계없이 Ctrl 누르고 마우스 휠을 돌리거나 Ctrl+Shift++ 눌러 Ctrl 확대/축소할 수도 있습니다.

병렬 스택 창 2022의 도구 모음 스크린샷

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

확대/축소 컨트롤의 표시 유형에 관계없이 Ctrl 누르고 마우스 휠을 돌리거나 Ctrl+Shift++ 눌러 Ctrl 확대/축소할 수도 있습니다.
검색 아이콘 검색 컨트롤 이 기능을 사용하면 스택 프레임을 쉽게 검색한 다음 화살표를 사용하여 해당 결과 간을 탐색할 수 있습니다.
저장 아이콘 컨트롤 저장 병렬 스택 창에서 콘텐츠를 이미지로 저장/내보낼 수 있습니다.
외부 코드 아이콘 외부 코드 컨트롤 표시 이 기능을 사용하면 외부 코드/라이브러리에서 스택을 표시/숨길 수 있습니다.
Copilot 요약 아이콘 호출 스택 요약 Visual Studio 2022 버전 17.13 프리뷰 4부터 Copilot가 설치 및 활성화되면, 요약을 선택할 수 있습니다. 이 단추는 관련 스레드 컨텍스트로 미리 로드된 Copilot 채팅 창을 열어 스레드 상태, 함수 호출 및 제안된 수정 사항을 비롯한 세부 정보를 탐색할 수 있도록 합니다.

스택 프레임 아이콘

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

아이콘 설명
노란색 화살표Yellow arrowYellow arrow 현재 스레드의 현재 위치(활성 스택 프레임)를 나타냅니다.
스레드 아이콘 현재 스레드가 아닌 스레드의 현재 위치(활성 스택 프레임)를 나타냅니다.
녹색 화살표 현재 스택 프레임(현재 디버거 컨텍스트)을 나타냅니다. 메서드 이름은 표시되는 위치마다 굵게 표시됩니다.
아이콘 설명
노란색 화살표Yellow arrowYellow arrow 현재 스레드의 현재 위치(활성 스택 프레임)를 나타냅니다.
스레드 아이콘 현재 스레드가 아닌 스레드의 현재 위치(활성 스택 프레임)를 나타냅니다.
녹색 화살표 현재 스택 프레임(현재 디버거 컨텍스트)을 나타냅니다. 메서드 이름은 표시되는 위치마다 굵게 표시됩니다.
상태 오류 현재 스택 프레임에 교착 상태와 같은 위험 상태 경고가 있음을 나타냅니다.
상태 제외 교착 상태 노드를 나타냅니다.
상태 정보 현재 스택 프레임에 대기 중, 잠금 대기, 소유 등과 같은 추가 정보가 있음을 나타냅니다.
상태 차단 현재 작업이 차단됨/대기 중 상태임을 나타냅니다.
Status RunningStatus Running실행 중인상태 현재 실행 중인 작업을 나타냅니다.

상황에 맞는 메뉴 항목

다음 바로 가기 메뉴 항목은 스레드 보기 또는 작업 보기에서 메서드를 마우스 오른쪽 단추로 클릭할 때 사용할 수 있습니다. 마지막 6개 항목은 호출 스택 창것과 동일합니다.

병렬 스택 창의 바로 가기 메뉴 스크린샷 병렬 스택 창의

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

병렬 스택 창 2022의 바로 가기 메뉴 스크린샷 병렬 스택 창의

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

스레드 보기

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

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

스레드 보기 그래프가 너무 커서 창에 맞지 않으면 조감도 컨트롤이 창에 나타납니다. 컨트롤의 프레임을 이동하여 그래프의 다른 부분으로 이동할 수 있습니다.

다음 그림에서는 Main에서 관리 코드로 네이티브 코드 전환으로 전환하는 하나의 스레드를 보여 줍니다. 6개의 스레드가 현재 메서드에 있습니다. 두 스레드는 Thread.Sleep으로, 두 스레드는 Console.WriteLine으로 계속 진행되며 현재 스레드는 SyncTextWriter.WriteLine을 계속합니다.

병렬 스택 창의 스레드 보기 스크린샷 병렬 스택 창의

다음 표에서는 스레드 보기의 주요 기능을 설명합니다.

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

다음 그림에서는 관리되는 네이티브 코드 전환의 주 스레드를 보여 줍니다. 현재 메서드에는 5개의 스레드가 있습니다. 4개의 스레드는 S.C 메서드 컨텍스트에서 계속 실행되고, 하나의 작업자 스레드는 관리 코드에서 네이티브 코드로 전환되는 과정에서 계속되며, 작업자 스레드에서 이름을 설정하는 작업을 수행합니다.

병렬 스택 창 2022 에서 스레드 뷰의 스크린샷. 병렬 스택 창에서의 스레드 보기.

다음 표에서는 스레드 보기의 주요 기능을 설명합니다.

설명선 요소 이름 설명
1 호출 스택 세그먼트 또는 노드 하나 이상의 스레드에 대한 일련의 메서드를 포함합니다. 프레임에 연결된 화살표 선이 없으면 프레임에 스레드의 전체 호출 경로가 표시됩니다.
2 파란색 강조 표시 현재 스레드의 호출 경로를 나타냅니다.
3 화살표 선 노드를 연결하여 스레드의 전체 호출 경로를 구성합니다.
4 노드 헤더 노드에 대한 프로세스/스레드, 스레드 이름 및 스레드 ID의 수를 표시합니다.
5 메서드 동일한 메서드에서 하나 이상의 스택 프레임을 나타냅니다.
6 메서드의 툴팁 메서드를 마우스로 가리키면 나타납니다. 스레드 보기에서 도구 설명은 스레드 창과 유사한 테이블에 모든 스레드를 표시합니다.
7 스레드 설명 스레드에 대한 AI 생성 설명입니다. Visual Studio 2022 버전 17.13 미리 보기 1부터 이 설명은 Copilot 설치 및 활성화될 때 표시됩니다.

작업 보기

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

작업 보기:

  • 태스크를 실행하지 않는 스레드의 호출 스택은 표시되지 않습니다.
  • 태스크를 실행하는 스레드의 호출 스택은 태스크에 가장 적합한 프레임을 표시하기 위해 위쪽과 아래쪽에서 시각적으로 잘립니다.
  • 여러 태스크가 한 스레드에 있는 경우 해당 태스크의 호출 스택이 별도의 노드에 표시됩니다.

전체 호출 스택을 보려면 스택 프레임을 마우스 오른쪽 단추로 클릭하고 스레드로 이동을 선택하여 스레드 보기로 다시 전환합니다.

다음 그림에서는 위쪽의 스레드 보기와 아래쪽에 있는 해당 작업 보기를 보여 줍니다.

스레드 및 작업 보기의 스크린샷

병렬 스택 창의 작업 보기 스크린샷

메서드를 마우스로 가리키면 추가 정보가 포함된 도구 설명이 표시됩니다. 작업 보기에서 툴팁은 작업 창과 유사한 테이블 형태로 모든 작업을 보여줍니다.

다음 이미지는 맨 위에 있는 스레드 보기 및 아래쪽에 있는 해당 작업 보기에 대한 메서드에 대한 도구 설명을 보여 줍니다.

스레드 및 작업 도구 설명의 스크린샷

스레드 및 작업 도구 설명의 스크린샷

메서드 뷰

스레드 보기 또는 작업 보기에서 도구 모음에서 토글 메서드 뷰 아이콘을 선택하여 현재 메서드의 그래프를 피벗할 수 있습니다. 메서드 뷰 현재 메서드에서 호출하거나 호출하는 모든 스레드의 모든 메서드를 한눈에 볼 수 있습니다. 다음 그림에서는 왼쪽의 스레드 보기와 오른쪽의 메서드 뷰 동일한 정보가 표시되는 방식을 보여 줍니다.

병렬 스택 창의 메서드 보기 스크린샷 병렬 스택 창의

병렬 스택 창 2022의 메서드 보기 스크린샷 병렬 스택 창의

새 스택 프레임으로 전환하면 해당 메서드를 현재 메서드로 만들고 메서드 뷰 새 메서드에 대한 모든 호출자와 호출자를 표시합니다. 이로 인해 해당 메서드가 호출 스택에 표시되는지 여부에 따라 일부 스레드가 보기에서 표시되거나 사라질 수 있습니다. 호출 스택 보기로 돌아가려면 메서드 뷰 도구 모음 아이콘을 다시 선택합니다.

병렬 스택 비디오 자습서를 사용하여 스레드 및 작업 디버그

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