다음을 통해 공유


Visual Studio의 스레드 및 프로세스 디버깅

스레드와 프로세스는 컴퓨터 분야에서 서로 연관된 개념입니다. 이 둘은 모두 특정 순서로 실행해야 할 명령 시퀀스를 나타냅니다. 그러나 개별 스레드 또는 프로세스의 명령은 함께 실행할 수 있습니다.

프로세스는 운영 체제에 있으며 사용자에게 프로그램이나 응용 프로그램으로 표시됩니다. 반면에 스레드는 프로세스 내에 있습니다. 따라서 스레드를 간단한 프로세스라고도 합니다. 각 프로세스는 하나 이상의 스레드로 구성됩니다.

여러 개의 프로세스가 있으면 컴퓨터에서 한 번에 여러 작업을 수행할 수 있습니다. 여러 개의 스레드가 있으면 프로세스에서 작업을 구분하여 병렬로 수행할 수 있습니다. 프로세서가 여러 개 있는 컴퓨터에서는 프로세스나 스레드를 서로 다른 프로세서에서 실행하여 병렬 처리를 수행할 수 있습니다.

완벽한 병렬 처리가 항상 가능한 것은 아닙니다. 경우에 따라서는 스레드를 동기화해야 합니다. 한 스레드에서 다른 스레드의 결과를 기다리거나 한 스레드에 사용 중인 리소스를 다른 스레드에서 단독으로 액세스하여 사용해야 할 수도 있습니다. 주로 동기화 문제로 인해 다중 스레드 응용 프로그램에서 버그가 발생합니다. 경우에 따라 스레드가 전혀 사용할 수 없는 리소스를 기다리다가 교착 상태가 발생할 수 있습니다.

Visual Studio 디버거에서는 스레드 및 프로세스 디버깅에 사용할 수 있는 강력하고 간편한 도구를 제공합니다.

Visual Studio의 스레드 및 프로세스 디버깅 도구

Visual Studio에서 프로세스 작업을 수행하기 위한 기본 도구는 프로세스에 연결 대화 상자, 프로세스 창 및 디버그 위치 도구 모음입니다. 스레드 디버깅을 위한 기본 도구는 스레드 창, 소스 창의 스레드 마커 및 디버그 위치 도구 모음입니다.

다중 스레드 응용 프로그램 디버깅을 위한 기본 도구는 병렬 스택병렬 작업, 병렬 조사식GPU 스레드 창입니다.

다음 표에서는 각 도구에 제공되는 정보와 각 도구에서 수행할 수 있는 작업을 보여 줍니다.

사용자 인터페이스

사용할 수 있는 정보

수행할 수 있는 작업

프로세스에 연결 대화 상자

연결할 수 있는 사용 가능한 프로세스

  • 프로세스 이름(.exe)

  • 프로세스 ID 번호

  • 메뉴 모음 제목

  • 형식(Managed v4.0; Managed v2.0, v1.1, v1.0; x86; x64; IA64)

  • 사용자 이름(계정 이름)

  • 세션 번호

연결할 프로세스 선택

원격 컴퓨터 선택

원격 컴퓨터 연결을 위한 전송 형식 변경

프로세스

연결된 프로세스

  • 프로세스 이름

  • 프로세스 ID 번호

  • 프로세스 .exe 경로

  • 메뉴 모음 제목

  • 상태(중단, 실행)

  • 디버깅(네이티브, 관리 등)

  • 전송 종류(기본값, 네이티브, 인증 안 함)

  • 전송 한정자(원격 컴퓨터)

도구

  • 연결

  • 분리

  • 종료

바로 가기 메뉴

  • 연결

  • 분리

  • 디버깅 중지 시 분리

  • 종료

스레드

현재 프로세스의 스레드

  • 스레드 ID

  • 관리 ID

  • 범주(주 스레드, 인터페이스 스레드, 원격 프로시저 호출 처리기 또는 작업자 스레드)

  • 스레드 이름

  • 스레드가 생성되는 위치

  • 우선 순위

  • 선호도 마스크

  • 일시 중단 횟수

  • 프로세스 이름

  • 플래그 표시기

  • 일시 중단 표시기

도구

  • 검색

  • 호출 스택 검색

  • 내 코드만 플래그 지정

  • 사용자 지정 모듈 선택 영역 플래그 지정

  • 그룹화 방법

  • Columns

  • 호출 스택 확장/축소

  • 그룹 확장/축소

  • 스레드 중지/재개

바로 가기 메뉴

  • 소스의 스레드 표시

  • 스레드로 전환

  • 실행 중인 스레드 중지

  • 중지된 스레드 재개

  • 주의할 스레드에 플래그 지정

  • 스레드 플래그 해제

  • 스레드 이름 바꾸기

  • 스레드 표시 및 숨기기

다른 작업

  • DataTip에서 스레드의 호출 스택 보기

소스 창

왼쪽 여백의 스레드 표시기는 단일 또는 다중 스레드를 나타냅니다. 기본적으로 설정되어 있지 않으며 스레드 창의 바로 가기 메뉴를 사용하여 설정합니다.

바로 가기 메뉴

  • 스레드로 전환

  • 주의할 스레드에 플래그 지정

  • 스레드 플래그 해제

디버그 위치 도구 모음

  • 현재 프로세스

  • 응용 프로그램 축소판 그림 표시

  • 응용 프로그램 일시 중단

  • 응용 프로그램 다시 시작

  • 응용 프로그램 일시 중단 및 종료

  • 현재 스레드

  • 현재 스레드 플래그 상태 전환

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

  • 현재 프로세스만 표시

  • 현재 스택 프레임

  • 다른 프로세스로 전환

  • 응용 프로그램 일시 중단, 다시 시작 및 종료

  • 현재 프로세스의 다른 스레드로 전환

  • 현재 스레드의 다른 스택 프레임으로 전환

  • 현재 스레드 플래그 설정 또는 해제

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

  • 현재 프로세스만 표시

병렬 스택

  • 한 뷰에 표시되는 다중 스레드의 호출 스택입니다.

  • 스레드별 활성 스택 프레임입니다.

  • 메서드에 대한 호출자 및 호출 수신자입니다.

  • 지정된 스레드 필터링

  • 병렬 작업 뷰로 전환

  • 스레드 플래그 설정 또는 해제

  • 확대/축소

병렬 작업

  • 작업 ID, 작업 상태(예약됨, 실행 중, 대기 중, 교착 상태), 작업에 할당된 스레드 등의 Task 개체 정보를 표시합니다.

  • 호출 스택의 현재 위치입니다.

  • 만든 시간에 작업에 전달된 대리자입니다.

  • 현재 작업으로 전환

  • 작업 플래그 설정 또는 해제

  • 작업 중지 또는 재개

병렬 조사식

  • 특히 주의할 스레드를 표시할 수 있는 플래그 열

  • 화살표가 선택된 프레임을 나타내는 프레임 열

  • 컴퓨터, 프로세스, 타일, 작업 및 스레드를 표시할 수 있는 구성 가능한 열

  • 스레드 플래그 설정 또는 해제

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

  • 프레임 전환

  • 열 정렬

  • 스레드 그룹화

  • 스레드 중지 또는 재개

  • 병렬 조사식 창에서 데이터 내보내기

GPU 스레드

  • 특히 주의할 스레드를 표시할 수 있는 플래그 열

  • 활성 스레드 열 - 노란색 화살표는 활성 스레드를 나타냅니다. 화살표는 실행이 중단되고 디버거가 실행된 스레드를 나타냅니다.

  • 스레드 카운트 열 - 스레드 수를 동일한 위치에 표시합니다.

  • 열 - 각 스레드 그룹이 위치한 코드 줄을 표시합니다.

  • 주소 열 - 각 스레드 그룹이 위치한 명령 주소를 표시합니다.

  • 위치 열 - 주소 코드에서의 위치입니다.

  • 상태 열 - 스레드가 활성화되어 있는지 아니면 차단되어 있는지를 표시합니다.

  • 타일 열 - 행의 스레드에 대한 타일 인덱스를 표시합니다.

  • 다른 활성 스레드로 변경

  • 특정 타일 및 스레드 표시

  • 열 표시 또는 숨기기

  • 열 기준 정렬

  • 스레드 그룹화

  • 스레드 중지 또는 재개

  • 스레드 플래그 설정 또는 해제

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

참고 항목

기타 리소스

Visual Studio 디버거에서 실행 중인 프로세스에 연결

Visual Studio에서 다중 스레드 응용 프로그램 디버깅

GPU 코드 디버깅