Visual Studio 디버거를 사용하면 코드를 탐색하여 앱의 상태를 검사하고 코드 스테핑이라고도 하는 실행 흐름을 표시할 수 있습니다. 바로 가기 키, 디버그 명령, 중단점 및 기타 기능을 사용하여 검사하려는 코드를 빠르게 확인할 수 있습니다. 디버거 탐색 명령 및 바로 가기에 익숙해지면 앱 문제를 더 빠르고 쉽게 찾아 해결할 수 있습니다. 코드 탐색 및 디버깅과 관련된 가장 일반적인 바로 가기 키 목록은 바로 가기 키의 디버그 섹션을 참조하세요.
비고
코드를 디버깅하는 경우 이 문서를 읽기 전에 절대 초보자를 위한 디버깅 및 디버깅 기술 및 도구를 읽어보는 것이 좋습니다.
디버깅 시작 및 중단 모드 입력
일부 탐색 명령은 앱을 시작하고 디버거를 자동으로 연결합니다. 앱은 탐색을 시작하는 데 사용한 명령에 따라 특정 코드 줄에서 일시 중지되고 중단 모드 (즉, 앱이 디버거에서 일시 중지됨)로 전환됩니다.
중단 모드에서는 함수, 변수 및 개체가 메모리에 남아 있는 동안 앱 실행이 일시 중단됩니다. 디버거가 중단 모드인 경우 코드를 탐색할 수 있습니다. 중단 모드로 빠르게 진입하는 두 가지 매우 일반적인 방법이 있습니다.
중단점을 설정하고 앱을 시작합니다.
특정 위치 또는 함수로 실행합니다.
예를 들어 Visual Studio의 코드 편집기에서 커서 실행 명령을 사용하여 디버거가 연결된 상태에서 앱을 시작하고 중단 모드로 전환할 수 있습니다. 그런 다음 단계 명령을 사용하여 코드를 탐색할 수 있습니다.
코드 단계별 명령은 앱을 시작하는 데 사용할 수 있지만 중단 모드로 전환한 후에 더 일반적으로 사용됩니다.
중단 모드에서 코드 탐색
일부 탐색 명령은 주로 중단 모드에서 사용됩니다(즉, 디버거에서 일시 중지된 동안).
코드 스테핑 명령은 중단 모드에서 가장 일반적으로 사용됩니다.
클릭하기 위해 실행과 같은 일부 명령은 중단 모드에 있는 동안에만 사용할 수 있습니다.
디버깅 및 중단 모드
중단 모드에 있는 경우 다양한 명령을 사용하여 코드를 탐색할 수 있습니다. 변수 값을 검사하여 위반 또는 버그를 찾을 수 있습니다. 일부 프로젝트 형식의 경우 중단 모드에 있을 때 앱을 조정할 수도 있습니다.
모듈 및 조사식 창과 같은 대부분의 디버거 창은 디버거가 앱에 연결된 경우에만 사용할 수 있습니다. 로컬 창에서 변수 값을 보거나 조사식 창에서 식을 평가하는 것과 같은 일부 디버거 기능은 디버거가 일시 중지된 경우에만 사용할 수 있습니다(즉, 중단 모드).
비고
소스 또는 기호(.pdb) 파일이 로드되지 않은 코드를 중단하면 디버거에 파일을 찾고 로드하는 데 도움이 되는 소스 파일을 찾을 수 없거나 기호를 찾을 수 없는 페이지가 표시됩니다. 기호(.pdb) 및 소스 파일지정을 참조하세요. 기호 또는 원본 파일을 로드할 수 없는 경우에도 디스어셈블리 창에서 어셈블리 지침을 디버그할 수 있습니다.
코드 단계별 실행
코드 단계별 실행 은 디버거가 연결된 애플리케이션 코드를 한 번에 하나씩 실행하는 것을 의미합니다. 디버거 단계 명령을 사용하면 각 문의 효과를 관찰하고 해당 실행 흐름에 대해 자세히 알아볼 수 있습니다.
코드에 입문하다
디버깅할 때 각 문을 중지하려면 디버그>한 단계씩 실행하거나 F11을 선택합니다.
디버거는 물리적 줄이 아닌 코드 문을 단계씩 실행합니다. 예를 들어 절을 if
한 줄로 작성할 수 있습니다.
그러나 이 줄을 한 단계씩 실행하면 디버거는 조건을 한 단계로 처리하고 그 결과를 다른 단계로 처리합니다. 앞의 예제에서 조건은 true입니다.
중첩된 함수 호출 시, 한 단계씩 들어가기는 가장 깊이 중첩된 함수로 들어갑니다. 예를 들어 다음과 같은 호출에서 Func1(Func2())
를 사용하는 경우 디버거는 함수Func2
를 단계별로 실행합니다.
팁 (조언)
각 코드 줄을 실행할 때 변수를 마우스로 가리키면 해당 값을 보거나 지역 및 조사식 창을 사용하여 값이 변경되는 것을 볼 수 있습니다. 함수를 단계별로 실행하면서 호출 스택 을 시각적으로 추적할 수도 있습니다. (Visual Studio Enterprise의 경우에만 디버깅하는 동안 호출 스택의 Map 메서드를 참조하세요.)
코드 단계별 실행 및 일부 함수 건너뛰기
디버깅할 때 함수는 신경 쓰지 않을 수 있습니다. 또는 잘 테스트된 라이브러리 코드와 같은 일부 코드가 작동하는지 알 수 있습니다. 다음 명령을 사용하여 코드를 단계별로 실행할 때 코드를 건너뛸 수 있습니다. 함수는 계속 실행되지만 디버거는 건너뜁니다.
키보드 명령 | 디버그 메뉴 명령 | 설명 |
---|---|---|
F10 | 스텝 오버 | 현재 줄에 함수 호출이 포함된 경우 Step Over 는 코드를 실행한 다음 호출된 함수가 반환된 후 코드의 첫 번째 줄에서 실행을 일시 중단합니다. |
쉬프트+F11 | 나가기 | Step Out은 코드를 계속 실행하고 현재 함수가 반환되면 실행을 일시 중단합니다. 디버거는 현재 함수를 건너뜁니다. |
특정 위치 또는 함수로 실행
검사할 코드를 정확히 알고 있거나 디버깅을 시작할 위치를 알고 있는 경우 특정 위치 또는 함수로 직접 실행하는 것이 좋습니다.
- 중단점을 다시 사용하려는 경우 중단점을 설정하는 것이 가장 좋습니다.
- 다른 방법은 편의를 위한 것이며 임시 중단점을 설정하는 것과 유사합니다.
코드에서 중단점까지 실행
코드에서 간단한 중단점을 설정하려면 실행을 일시 중단하려는 코드 줄 옆에 있는 맨 왼쪽 여백을 선택합니다. 줄을 선택한 다음 F9을 선택하거나, 디버그>에서 중단점 전환을 선택하거나, 마우스 오른쪽 버튼을 클릭하여 중단점> 삽입을 선택할 수도 있습니다. 중단점은 코드 줄 옆의 왼쪽 여백에 빨간색 점으로 나타납니다. 디버거는 줄이 실행되기 직전에 실행을 일시 중단합니다.
Visual Studio의 중단점은 조건부 중단점 및 추적점과 같은 다양한 기능 집합을 제공합니다. 자세한 내용은 중단점 사용을 참조하세요.
함수 중단점까지 실행
디버거가 지정된 함수에 도달할 때까지 실행되도록 설정할 수 있습니다. 함수를 이름으로 지정하거나 호출 스택에서 선택할 수 있습니다.
이름으로 함수 중단점을 지정하려면 다음을 수행합니다.
새 중단점>>를 선택합니다.
새 함수 중단점 대화 상자에서 함수의 이름을 입력하고 해당 언어를 선택합니다.
확인을 선택합니다.
함수가 오버로드되거나 둘 이상의 네임스페이스에 있는 경우 중단점 창에서 원하는 네임스페이스를 선택할 수 있습니다.
호출 스택에서 함수 중단점을 선택하려면 다음을 수행합니다.
디버깅하는 동안Windows>디버그>를 선택하여호출 스택 창을 엽니다.
호출 스택 창에서 함수를 마우스 오른쪽 단추로 클릭하고 커서 실행을 선택하거나 Ctrl+F10을 선택합니다.
호출 스택을 시각적으로 추적하는 방법에 대한 자세한 내용은 디버깅하는 동안 호출 스택의 맵 메서드를 참조하세요.
커서 위치로 실행
커서 위치로 실행하려면 소스 코드 또는 호출 스택 창에서 중단하려는 줄을 선택한 다음 마우스 오른쪽 단추를 클릭하고 커서 실행을 선택하거나 Ctrl+F10을 선택합니다. 커서까지 실행을 선택하는 것은 임시 중단점을 설정하는 것과 비슷합니다.
커서 위치로 강제 실행
커서 위치로 실행하려면 소스 코드 또는 호출 스택 창에서 중단하려는 줄을 선택한 다음 마우스 오른쪽 단추를 클릭하고 커서에 강제 실행을 선택합니다. 강제 실행을 커서에 선택하면 디버거가 커서가 위치한 코드 줄에 도달할 때까지 중단점과 최초 예외를 모두 건너뜁니다.
빠르게 클릭
디버거가 일시 중지된 동안 소스 코드 또는 디스어셈블리 창의 문장 위로 마우스를 가져가서 실행을 이 위치로 녹색 화살표를 선택할 수 있습니다. [클릭으로 실행]을 사용하는 것은 임시 중단점을 설정하는 것과 유사합니다.
클릭 시 강제 실행
디버거가 일시 중지되는 동안 Shift 키를 누른 채로 소스 코드의 문에 마우스를 올리고, 여기로 강제 실행을 선택할 수 있습니다(두 개의 녹색 화살표). 이 옵션을 선택하면 애플리케이션이 Visual Studio 디버거를 연결하고 커서 위치에서 일시 중지됩니다. 실행 중에 발견된 중단점 및 첫 번째 예외는 일시적으로 비활성화됩니다.
비고
Force Run to Click 기능은 Visual Studio 2022부터 사용할 수 있습니다.
수동으로 코드 나누기
실행 중인 앱에서 사용 가능한 다음 코드 줄로 중단하려면 디버그>모두 중단을 선택하거나 Ctrl+Alt+Break를 선택합니다.
사용자가 아닌 코드 디버그
기본적으로 디버거는 내 코드만이라는 설정을 사용하도록 설정하여 앱 코드만 디버그하려고 합니다. 이 기능이 다양한 프로젝트 형식 및 언어에 대해 작동하는 방식 및 사용자 지정 방법에 대한 자세한 내용은 내 코드만 참조하세요.
디버깅하는 동안 프레임워크 코드, 타사 라이브러리 코드 또는 시스템 호출을 살펴보려면 내 코드만 사용하지 않도록 설정할 수 있습니다. 도구(또는 디버그) >옵션>디버깅에서 내 코드만 사용 확인란의 선택을 취소합니다. 내 코드만 사용하지 않도록 설정하면 사용자 코드가 아닌 코드가 디버거 창에 나타나고 디버거가 사용자 코드가 아닌 코드를 한 단계씩 실행할 수 있습니다.
비고
디바이스 프로젝트에는 내 코드만 지원되지 않습니다.
시스템 코드 디버그
Microsoft 시스템 코드에 대한 디버깅 기호를 로드하고 Just My Code를 비활성화한 경우 다른 호출과 마찬가지로 시스템 호출을 단계별로 디버깅할 수 있습니다.
Visual Studio 2022 버전 17.7부터 디버깅 기호를 수동으로 로드할 필요 없이 외부 코드를 한 단계 더 실행할 때 .NET 코드를 자동으로 컴파일할 수 있습니다. 자세한 내용은 디버깅하는 동안 .NET 어셈블리에서 소스 코드 생성참조하세요.
Microsoft 기호를 로드하는 방법에 대한 자세한 내용은 기호 파일의 위치 구성 및 로드 옵션을 참조하세요.
특정 시스템 구성 요소에 대한 기호를 로드하려면 다음을 수행합니다.
디버깅하는 동안Windows>디버그>를 선택하거나 Ctrl++를 눌러모듈 창을 엽니다.
모듈 창에서 기호 상태 열에 로드된 기호가 있는 모듈을 알 수 있습니다. 기호를 로드할 모듈을 마우스 오른쪽 단추로 클릭한 다음 기호 로드를 선택합니다.
관리 코드에서 속성과 연산자를 단계별로 실행하기
디버거는 기본적으로 관리 코드의 속성 및 연산자를 단계별로 실행합니다. 대부분의 경우 이 동작은 더 나은 디버깅 환경을 제공합니다. 속성 또는 연산자를 단계별로 실행하려면 디버그>옵션을 선택합니다. 디버깅>일반 페이지에서 속성 및 연산자 단계별 실행(관리 전용) 확인란의 선택을 취소합니다.
포인터를 이동하여 실행 흐름 변경
노란색 실행 포인터를 이동하여 실행할 다음 문을 변경할 수 있습니다. 중단 모드에서 이 기능을 사용할 수 있습니다.
고급 디버거 기능입니다. 자세한 내용은 실행 포인터 이동을 참조하세요.
관련 콘텐츠
- 디버깅이란?
- 디버깅 기술 및 도구
- 먼저 디버깅 살펴보기