다음을 통해 공유


Visual Studio 디버거에서 스레드 보기(C#, Visual Basic, C++)

Visual Studio 디버거의 스레드 창을 사용하면 디버깅 중인 애플리케이션에서 스레드를 검사하고 작업할 수 있습니다. 이 창에서는 코드에서 스레드를 그룹화, 정렬, 플래그 지정, 고정, 해동 및 검색하고 호출 스택을 표시하는 기능을 제공합니다.

스레드 창은 Visual Studio 디버거가 실행되는 동안에만 사용할 수 있습니다. 디버깅 세션 중에 디버그>Windows>스레드을 선택하여 창을 열 수 있습니다.

이 문서에서는 C#, Visual Basic 또는 C++ 프로그램의 스레드 창으로 작업하는 방법을 설명합니다. 스레드 창을 사용하는 방법에 대한 단계별 지침을 찾고 있는 경우 연습: 스레드 창사용하여 디버그를 참조하세요.

스레드 창 테이블 탐색

스레드 창은 각 행이 애플리케이션의 개별 스레드에 해당하는 테이블을 표시합니다. 기본 보기에서 테이블에는 애플리케이션의 모든 스레드가 표시됩니다. 관심 있는 스레드만 표시하도록 테이블 설정을 구성할 수 있습니다. 이 테이블은 스레드를 자세히 설명하는 여러 열을 제공합니다. 열 배치를 조정하고 불필요한 열을 숨길 수 있습니다.

다음 표에서는 스레드 창 테이블에 사용할 수 있는 모든 열에 대해 설명하고 열이 기본 보기에 표시되거나 숨겨져 있는지 여부를 나타냅니다. 열은 기본 테이블에서의 위치에 따라 왼쪽에서 오른쪽으로 정렬됩니다.

기본값 설명
깃발 눈에 보이지만 레이블이 없는 이 열의 빨간색 플래그는 특별히 주의하도록 표시된 스레드를 나타냅니다. 플래그(아이콘 색이 빨간색으로 변경됨)를 선택하여 스레드를 표시하거나 표시 해제(플래그 윤곽선에 아이콘 변경)합니다. 색이 지정된 플래그 아이콘은 표시된 스레드를 테이블의 다른 스레드와 구분하는 데 도움이 됩니다. 자세한 내용은 플래그 지정 및 스레드플래그 해제를 참조하세요.
현재 스레드 표시됨, 라벨이 없는 이 열의 노란색 화살표 아이콘은 디버거에서 실행 중인 애플리케이션의 현재 스레드를 나타냅니다. 이 열의 화살표 윤곽선 아이콘은 비전류 스레드에 대한 현재 디버거 컨텍스트를 나타냅니다.
ID 보이는 각 스레드에 대한 ID 번호를 제공합니다.
관리 ID 보이는 관리되는 스레드에 대한 관리 ID 번호를 표시합니다.
범주 보이는 스레드 범주를 사용자 인터페이스 스레드, 원격 프로시저 호출 처리기 또는 작업자 스레드로 나타냅니다. 특수 범주는 애플리케이션의 주 스레드를 식별합니다.
이름 보이는 각 스레드를 해당 이름으로 식별하거나, 스레드에 지정된 이름이 없으면 이름 없음><. 스레드가 더 이상 존재하지 않으면 스레드에 [스레드 제거됨] 레이블이 있습니다.
위치 보이는 애플리케이션 호출 스택 내에서 스레드가 실행 중인 위치를 보여 집니다. 드롭다운 화살표를 선택하여 스레드에 대한 전체 호출 스택을 확인합니다. 스레드가 더 이상 존재하지 않으면 위치는 사용할 수 없음으로 <레이블이 지정됩니다>.
우선순위 숨겨진 시스템에서 각 스레드에 할당한 우선 순위 또는 선호도를 표시합니다.
선호도 마스크 숨겨진 각 스레드에 대한 프로세서 선호도 마스크를 표시합니다. 다중 프로세서 시스템에서 선호도 마스크는 스레드를 실행할 수 있는 프로세서를 결정합니다.
일시 중단된 개수 숨겨진 일시 중단된 수를 제공합니다. 이 개수는 스레드를 실행할 수 있는지 여부를 결정합니다. 자세한 내용은 고정 및 해동 스레드을 참조하세요.
프로세스 이름 숨겨진 각 스레드가 속한 프로세스를 표시합니다. 이 열의 데이터는 많은 프로세스를 디버깅할 때 유용할 수 있습니다.
프로세스 ID 숨겨진 각 스레드가 속한 프로세스 ID를 표시합니다.
전송 한정자 숨겨진 디버거가 연결된 컴퓨터를 고유하게 식별합니다.

테이블 열 표시 및 숨기기

스레드 창의 도구 모음에 있는 드롭다운은 사용 가능한 열 목록을 보여줍니다. 드롭다운 목록을 확장하고 열 이름을 선택하여 테이블에서 해당 열의 가시성을 전환합니다. 표시되는 열은 목록에 확인 표시로 표시됩니다.

특별한 주의를 끌기 위해 스레드에 플래그 지정

플래그 아이콘을 사용하여 특별한 주의를 끌기 위해 스레드를 표시합니다. 표시된 스레드는 스레드 창 테이블의 빨간색 플래그 아이콘으로 표시됩니다. 자세한 내용은 플래그 및 스레드플래그 해제를 참조하세요.

플래그가 지정된 스레드만 표시

스레드 창을 필터링하여 플래그가 지정된 스레드만 표시할 수 있습니다. 스레드 창 도구 모음에서 플래그가 지정된 스레드만 보기 (이중 플래그 아이콘)을 선택합니다. Ctrl + 9 바로 가기 키를 사용할 수도 있습니다. 이 작업은 플래그가 지정된 스레드가 있는 경우에만 사용할 수 있습니다.

스레드 고정 및 해동

스레드를 동결하면 리소스를 사용할 수 있는 경우에도 시스템에서는 스레드 실행을 시작하지 않습니다.

네이티브 코드에서는 Windows 함수 SuspendThread 호출하고 ResumeThread스레드를 일시 중단하거나 다시 시작할 수 있습니다. 또한 MFC 함수 CWinThread::SuspendThread 및 CWinThread::ResumeThread 를 호출할 수도 있습니다. SuspendThread 또는 ResumeThread 함수를 호출하면 스레드 창에 표시된 일시 중단된 개수이 변경됩니다. 네이티브 스레드를 동결하거나 해동하는 경우 일시 중단된 개수는 변경되지 않습니다. 스레드가 해동되고 일시 중단된 횟수가 0이 아니면 네이티브 코드에서 스레드를 실행할 수 없습니다.

관리 코드에서 스레드를 동결하거나 해동할 때 일시 중단된 수가 변경됩니다. 관리 코드에서 스레드를 중단하는 경우, 일시 중단된 개수는 1입니다. 네이티브 코드에서 스레드를 고정하면 SuspendThread 호출을 사용하지 않는 한 일시 중단된 횟수는 0입니다.

메모

네이티브 코드에서 관리 코드로의 호출을 디버그할 때 관리 코드는 호출 네이티브 코드와 동일한 실제 스레드에서 실행됩니다. 네이티브 스레드를 일시 중단하거나 중지하면 관리 코드도 중지됩니다.

선택한 스레드에 대한 실행 변경

하나 이상의 스레드 실행을 중지하거나 다시 실행할 수 있습니다. 스레드 창에서 실행 상태를 업데이트할 스레드를 선택합니다. 스레드 창 도구 모음에서 스레드 고정(재생 아이콘 일시 중지) 또는 스레드 해제(녹색 재생 아이콘)을 선택합니다. 이 작업은 현재 선택한 스레드에만 적용됩니다. 고정 및 해동 작업은 각 스레드의 오른쪽 클릭 메뉴에서도 사용할 수 있습니다.

현재 스레드 변경

스레드 창 테이블의 노란색 화살표 아이콘은 현재 스레드(및 실행 포인터의 위치)를 나타냅니다. 원래 현재 스레드 표식도 남아 있습니다(화살표 윤곽선 아이콘으로 표시됨).

스레드 창 테이블의 노란색 화살표 아이콘은 현재 스레드(및 실행 포인터의 위치)를 나타냅니다. 중괄호 모양의 꼬리가 있는 녹색 화살표 아이콘은 비활성 스레드에 현재 디버거 컨텍스트가 있음을 나타냅니다.

다른 스레드로 전환

디버거에서 현재 스레드를 전환할 수 있는 두 가지 방법이 있습니다. 스레드 창 테이블에서 스레드를 두 번 클릭하면 해당 스레드가 현재 스레드로 설정됩니다. 스레드를 마우스 오른쪽 버튼으로 클릭한 후 스레드로 전환을 선택할 수도 있습니다.

스레드에 그룹화 및 정렬 적용

사용 가능한 열과 동일한 조건을 사용하여 스레드 창 테이블의 스레드를 그룹화할 수 있습니다. 해당 열이 현재 보기에 표시되는지 여부에 관계없이 모든 조건은 항상 그룹화에 사용할 수 있습니다. 테이블에 대해 하나의 그룹화만 선택할 수 있습니다.

스레드를 그룹화하면 각 그룹의 테이블에 제목이 나타납니다. 제목에는 그룹의 구성원 수와 함께 그룹 설명이 포함됩니다. 이름, 별로 그룹화하면 작업자 스레드 또는 플래그 없는 스레드같은 제목이 있는 그룹화가 표시될 수 있습니다. 각 그룹 머리글 옆에 확장/축소 화살표 아이콘이 나타납니다.

그룹화 조건을 적용하면 스레드 창 테이블의 보기가 업데이트되고 해당 제목 아래에 각 그룹의 멤버 스레드가 표시됩니다. 그룹에 대해 확장/축소 화살표 아이콘을 사용하여 현재 보기에서 멤버를 표시하거나 숨깁니다.

스레드 창 테이블의 스레드에 단일 정렬 조건을 적용할 수도 있습니다. 그룹화는 정렬보다 우선합니다. 예를 들어 범주에 따라 스레드를 그룹화한 다음, 각 범주내에서 ID에 따라 정렬할 수 있습니다.

테이블의 스레드 그룹화

스레드 창 도구 모음에서 그룹별 드롭다운 목록을 펼치고 스레드를 그룹화할 조건을 선택합니다. 그룹에서 드롭다운 목록에서 없음 선택하여 적용된 그룹화도 제거할 수 있습니다.

테이블에서 스레드를 정렬하기

테이블 맨 위에 있는 열 머리글(예: 이름 또는 ID)을 선택하여 스레드 창 테이블의 스레드에 정렬을 적용합니다.

열 머리글을 선택하면 스레드 창 테이블의 뷰가 업데이트됩니다. 이때, 선택한 열의 값으로 정렬된 스레드가 표시됩니다. 선택한 열에는 위쪽/아래쪽 화살표 아이콘도 표시됩니다. 위쪽 화살표 아이콘은 선택한 열을 오름차순으로 정렬하는 것을 나타냅니다. 아래쪽 화살표 아이콘은 선택한 열을 기준으로 내림차순으로 정렬됨을 나타냅니다. 열 머리글을 선택하여 정렬 순서를 변경합니다.

그룹 내에서 스레드 정렬

스레드 창의 그룹 내에서 스레드를 정렬하려면 먼저 그룹별 드롭다운 목록을 사용하여 그룹화 조건을 적용합니다. 그런 다음 열 머리글을 선택하여 그룹화된 스레드를 선택한 열의 값으로 정렬합니다.

모든 그룹을 확장하거나 축소합니다.

현재 보기에서 모든 그룹을 표시하거나 숨기는 빠른 방법이 있습니다. 스레드 창의 도구 모음에서 그룹 확장(더하기 기호가 있는 이중 상자 아이콘) 또는 그룹 축소(빼기 기호가 있는 이중 상자 아이콘)를 선택합니다.

스레드 검색

스레드 창의 테이블에서 스레드를 검색하고, 표시된 테이블 열 중에서 특정 콘텐츠를 찾을 수 있습니다. 검색을 수행할 때 Visual Studio는 검색 문자열과 일치하는 열 데이터가 있는 스레드 행을 표시합니다. 또한 검색은 위치 열의 호출 스택 맨 위에 표시되는 스레드 위치를 검색합니다.

스레드에서 특정 콘텐츠 검색

스레드에서 특정 콘텐츠를 검색할 수 있는 몇 가지 방법이 있습니다. 스레드 창 도구 모음에서 검색 상자에 찾을 문자열을 입력한 후 Enter를 선택합니다. 검색 문자열에서 문자, 숫자 및 특수 문자(예: <)를 지정할 수 있습니다. 검색이 완료되면 스레드 창에서 일치하는 결과가 있는 스레드를 표시하도록 테이블을 업데이트합니다. Visual Studio는 검색 문자열과 일치하는 특정 인스턴스를 강조 표시합니다. 일반 스레드 보기로 돌아가려면 검색 상자 옆에 있는 X 아이콘을 선택합니다.

이전에 찾은 문자열을 검색할 수도 있습니다. 검색 드롭다운 상자를 사용하고 이전 검색 문자열을 선택합니다.

전체 호출 스택 검색

기본적으로 전체 호출 스택은 검색되지 않습니다. Visual Studio는 스레드 창 테이블에 표시되는 스레드에서만 일치 항목을 검색합니다.

스레드 창 도구 모음에서 검색 호출 스택 포함(항목 목록 아이콘)을 선택하여 전체 호출 스택을 포함할 수 있습니다. 옵션을 사용하도록 설정하면 목록 항목 아이콘에 테두리가 있습니다.

호출 스택 표시 및 프레임 간 전환

다중 스레드 프로그램에서 각 스레드에는 자체 호출 스택이 있습니다. 스레드 창은 이러한 스택을 보는 편리한 방법을 제공합니다.

각 스레드의 호출 스택을 시각적으로 표현하려면 병렬 스택 창을 사용합니다.

스레드에 대한 호출 스택 보기

스레드 창 테이블에서 전체 호출 스택을 검사할 스레드를 찾습니다. 위치 열에서 스레드 위치 왼쪽의 확장/축소 화살표를 선택합니다. 위치가 확장하여 스레드에 대한 전체 호출 스택을 표시합니다. 화살표를 다시 선택하여 위치만 표시합니다.

모든 호출 스택 보기 또는 축소

스레드 창에 테이블의 모든 스레드에 대한 전체 호출 스택이 항상 표시되는지 여부를 제어할 수 있습니다. 스레드 창 도구 모음에서 호출 스택 확장(더하기 기호가 있는 상자 아이콘)을 선택하거나 호출 스택 축소(빼기 기호가 있는 상자 아이콘)를 선택합니다.