다음을 통해 공유


Visual Studio에서 다중 스레드 애플리케이션 디버그

스레드는 운영 체제에서 프로세서 시간을 부여받는 명령 시퀀스입니다. 운영 체제에서 실행되는 모든 프로세스는 최소한 하나의 스레드로 구성됩니다. 프로세스에 스레드가 둘 이상인 경우를 다중 스레드라고 합니다.

다중 프로세서, 다중 코어 프로세서 또는 하이퍼스레딩 프로세스를 갖춘 컴퓨터는 몇 개의 동시 스레드를 실행할 수 있습니다. 많은 스레드를 사용하는 병렬 처리는 프로그램 성능을 크게 향상할 수 있지만 많은 스레드를 추적하기 때문에 디버깅을 더 어렵게 만들 수도 있습니다.

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

스레드 및 프로세스

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

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

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

다중 스레드 앱을 디버깅 도구

Visual Studio는 다중 스레드 앱을 디버그하는 데 사용할 다양한 도구를 제공합니다.

Visual Studio에서 제공하는 강력한 중단점 및 추적점은 다중 스레드 애플리케이션을 디버그할 때 유용할 수 있습니다. 중단점 조건 및 필터를 사용하여 개별 스레드에 중단점을 배치합니다. 추적점을 통해 프로그램 실행을 중단 없이 추적하여 교착 상태와 같은 문제를 검토할 수 있습니다. 자세한 내용은 중단점 작업 및 추적점을 참조하세요.

사용자 인터페이스가 있는 다중 스레드 애플리케이션은 특히 디버깅하기 어려울 수 있습니다. 애플리케이션을 다른 컴퓨터에서 실행하면서 원격 디버깅을 사용하는 것이 좋습니다. 자세한 내용은 원격 디버깅을 참조하세요.

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

사용자 인터페이스 사용할 수 있는 정보 수행할 수 있는 작업
프로세스에 연결 대화 상자 연결할 수 있는 사용 가능한 프로세스

- 프로세스 이름(.exe)
- 프로세스 ID 번호
- 메뉴 모음 제목
- 형식(Managed v4.0; Managed v2.0, v1.1, v1.0; x86; x64; IA64)
- 사용자 이름(계정 이름)
- 세션 번호
연결할 프로세스 선택

원격 컴퓨터 선택

원격 컴퓨터 연결을 위한 전송 형식 변경
프로세스 창 연결된 프로세스

- 프로세스 이름
- 프로세스 ID 번호
- 프로세스 .exe 경로
- 메뉴 모음 제목
- 상태(중단. 실행 중)
- 디버깅(네이티브, 관리 등)
- 전송 종류(기본값, 네이티브, 인증 안 함)
- 전송 한정자(원격 컴퓨터)
도구

- 연결
- 분리
- 종료

바로 가기 메뉴

- 연결
- 분리
- 디버깅 중지 시 분리
- 종료
스레드 현재 프로세스의 스레드

- 스레드 ID
- 관리 ID
- 범주(주 스레드, 인터페이스 스레드, 원격 프로시저 호출 처리기 또는 작업자 스레드)
- 스레드 이름
- 스레드가 생성되는 위치
- 우선 순위
- 선호도 마스크
- 일시 중단 횟수
- 프로세스 이름
- 플래그 표시기
- 일시 중단 표시기
도구

- 검색
- 호출 스택 검색
- 내 코드만 플래그 지정
- 사용자 지정 모듈 선택 영역 플래그 지정
- 그룹화 방법
- 열
- 호출 스택 확장/축소
- 그룹 확장/축소
- 스레드 중지/재개

바로 가기 메뉴

- 소스의 스레드 표시
- 스레드로 전환
- 실행 중인 스레드 중지
- 중지된 스레드 재개
- 추가 학습할 스레드에 플래그 지정
- 스레드 플래그 해제
- 스레드 이름 바꾸기
- 스레드 표시 및 숨기기

다른 작업

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

- 스레드로 전환
- 추가 학습할 스레드에 플래그 지정
- 스레드 플래그 해제
디버그 위치 도구 모음 - 현재 프로세스
- 애플리케이션 일시 중단
- 애플리케이션 다시 시작
- 애플리케이션 일시 중단 및 종료
- 현재 스레드
- 현재 스레드 플래그 상태 전환
- 플래그가 지정된 스레드만 표시
- 현재 프로세스만 표시
- 현재 스택 프레임
- 다른 프로세스로 전환
- 애플리케이션 일시 중단, 다시 시작 및 종료
- 현재 프로세스의 다른 스레드로 전환
- 현재 스레드의 다른 스택 프레임으로 전환
- 현재 스레드 플래그 설정 또는 해제
- 플래그가 지정된 스레드만 표시
- 현재 프로세스만 표시
병렬 스택 - 한 뷰에 표시되는 여러 스레드의 호출 스택입니다.
- 각 스레드에 대한 활성 스택 프레임입니다.
- 모든 메서드에 대한 호출자 및 호출 수신자입니다.
- 교착 상태 검색
- 지정된 스레드 필터링
- 외부 코드 스택 필터링
- 작업 뷰로 전환
- 스레드 플래그 설정 또는 해제
- 확대/축소
- 스택 프레임 복사
- 모든 스택을 이미지로 저장/내보내기
병렬 조사식 - 특히 주의할 스레드를 표시할 수 있는 플래그 열.
- 화살표가 선택된 프레임을 나타내는 프레임 열.
- 컴퓨터, 프로세스, 타일, 작업 및 스레드를 표시할 수 있는 구성 가능한 열.
- 스레드 플래그 설정 또는 해제
- 플래그가 지정된 스레드만 표시
- 프레임 전환
- 열 정렬
- 스레드 그룹화
- 스레드 중지 또는 재개
- 병렬 조사식 창에서 데이터 내보내기
작업 창 - 작업 ID, 작업 상태(예약됨, 실행 중, 대기 중, 교착 상태) 및 작업에 할당된 스레드를 포함한 Task 개체 정보를 표시합니다.
- 호출 스택의 현재 위치입니다.
- 생성 시간에 작업에 전달된 대리자
- 현재 작업으로 전환
- 작업 플래그 설정 또는 해제
- 작업 중지 또는 재개
GPU 스레드 - 특히 주의할 스레드를 표시할 수 있는 플래그 열.
- 현재 스레드 열 - 노란색 화살표는 현재 스레드를 나타냅니다.
- 스레드 수 열 - 스레드 수를 동일한 위치에 표시합니다.
- 열 - 각 스레드 그룹이 위치한 코드 줄을 표시합니다.
- 주소 열 - 각 스레드 그룹이 위치한 명령 주소를 표시합니다.
- 위치 열: 주소 코드에서의 위치입니다.
- 상태 열: 스레드가 활성화되어 있는지 아니면 차단되어 있는지를 표시합니다.
- 타일 열 - 행의 스레드에 대한 타일 인덱스를 표시합니다.
- 다른 스레드로 변경
- 특정 타일 및 스레드 표시
- 열 표시 또는 숨기기
- 열 기준 정렬
- 스레드 그룹화
- 스레드 중지 또는 재개
- 스레드 플래그 설정 또는 해제
- 플래그가 지정된 스레드만 표시