Visual Studio 디버거를 사용하여 코드 탐색

Visual Studio 디버거는 코드를 탐색하여 앱의 상태를 검사하고 코드 단계별 실행으로도 알려진 실행 흐름을 표시하는 데 도움이 될 수 있습니다. 바로 가기 키, 디버그 명령, 중단점 및 기타 기능을 사용하여 검사하려는 코드를 신속하게 가져올 수 있습니다. 디버거 탐색 명령과 바로 가기에 익숙해짐으로써 앱 문제를 더 빠르고 쉽게 찾아서 해결할 수 있습니다. 코드 탐색 및 디버깅과 관련된 가장 일반적인 바로 가기 키 목록은 바로 가기 키의 디버그 섹션을 참조하세요.

참고 항목

코드 디버깅을 처음 사용하는 경우 이 문서를 읽기 전에 완전 초보자를 위한 디버깅디버깅 기술 및 도구를 읽어보는 것이 좋습니다.

디버깅 시작 및 중단 모드 적용

일부 탐색 명령은 앱을 시작하고 디버거를 자동으로 연결합니다. 앱은 탐색을 시작하는 데 사용한 명령에 따라 특정 코드 줄에서 일시 중지되고 중단 모드(즉, 앱이 디버거에서 일시 중지됨)로 전환됩니다.

중단 모드에서는 함수, 변수 및 개체가 메모리에 있는 동안 앱 실행이 일시 중단됩니다. 디버거가 중단 모드에 있을 때 코드를 탐색할 수 있습니다. 중단 모드를 빠르게 적용하는 두 가지 매우 일반적인 방법은 다음과 같습니다.

  • 중단점 설정 및 앱을 시작합니다.

  • 특정 위치 또는 함수까지 실행합니다.

    예를 들어, Visual Studio의 코드 편집기에서 커서까지 실행 명령을 사용하여 디버거가 연결된 상태로 앱을 시작하고, 중단 모드를 적용할 수 있습니다. 그런 다음 한 단계 실행 명령을 사용하여 코드를 탐색할 수 있습니다.

    Animation that shows selecting Run To Cursor and then F11.

    Animation that shows selecting Run To Cursor and then F11.

코드 단계별 실행 명령은 앱을 시작하는 데 사용할 수 있지만 중단 모드로 전환한 후에 더 일반적으로 사용됩니다.

일부 탐색 명령은 주로 중단 모드에서 사용됩니다(즉, 디버거에서 일시 중지된 동안).

디버깅 및 중단 모드

중단 모드에서는 다양한 명령을 사용하여 코드를 탐색할 수 있습니다. 변수 값을 검사하여 위반 또는 버그를 찾을 수 있습니다. 일부 프로젝트 형식의 경우 중단 모드에 있는 동안 앱을 조정할 수도 있습니다.

모듈조사식 창과 같은 대부분의 디버거 창은 디버거가 앱에 연결된 경우에만 사용할 수 있습니다. 지역 창에서 변수 값 보기 또는 조사식 창에서 식 평가와 같은 일부 디버거 기능은 디버거가 일시 중지된 경우에만(중단 모드에서) 사용할 수 있습니다.

참고

소스 또는 기호(.pdb) 파일이 로드되지 않은 코드 실행을 중단하는 경우 디버거는 적절한 파일을 찾아 로드하는 데 도움이 될 수 있는 소스 파일을 찾을 수 없음 또는 기호를 찾을 수 없음 페이지를 표시합니다. 기호 파일(.pdb) 및 원본 파일 지정을 참조하세요. 기호 또는 원본 파일을 로드할 수 없는 경우에도 디스어셈블리 창에서 어셈블리 명령을 디버깅할 수 있습니다.

코드 단계별 실행

코드 단계별 실행은 디버거가 연결된 애플리케이션 코드를 한 번에 하나의 명령문씩 실행하는 것을 의미합니다. 디버거 단계 명령은 각 문의 효과를 관찰하고 해당 실행 흐름에 대해 자세히 알아보는 데 도움이 됩니다.

한 단계씩 코드 실행

디버그하는 동안 각 문에서 중지하려면 디버그>한 단계씩 코드 실행을 사용하거나 F11 키를 선택합니다.

디버거는 실제 줄이 아닌 코드 문을 단계별로 실행합니다. 예를 들어 한 줄에 if 절을 작성할 수 있습니다.

int x = 42;
string s = "Not answered";
if( int x == 42) s = "Answered!";

하지만 이 줄을 한 단계씩 실행하면 디버거는 조건을 한 단계로 처리하고 결과를 다른 단계로 처리합니다. 위의 예제에서 조건은 true입니다.

중첩된 함수 호출인 경우 한 단계씩 코드 실행 명령은 가장 안쪽에 중첩된 함수를 한 단계씩 실행합니다. 예를 들어, Func1(Func2())와 같은 호출에서 한 단계씩 코드 실행을 사용하면 디버거는 함수 Func2를 한 단계씩 실행합니다.

각 코드 줄을 실행할 때 변수를 마우스로 가리켜서 값을 확인하거나 지역조사식 창을 사용하여 값 변경 내용을 볼 수 있습니다. 또한 함수를 한 단계씩 코드 실행하는 동안 호출 스택을 시각적으로 추적할 수 있습니다. (Visual Studio Enterprise를 사용하는 경우에만 디버그하는 동안 호출 스택의 메서드 매핑을 참조하세요.)

단계별 코드 실행 및 일부 함수 건너뛰기

디버그하는 동안 함수는 중요하지 않을 수 있습니다. 또는 잘 테스트된 라이브러리 코드와 같이 일부 코드가 작동하는 것을 알고 있을 수 있습니다. 다음 명령을 사용하여 코드를 단계별로 실행하는 동안 코드를 건너뛸 수 있습니다. 함수는 계속 실행되지만 디버거는 이를 건너뜁니다.

키보드 명령 디버그 메뉴 명령 설명
F10 프로시저 단위 실행 현재 줄에 함수 호출이 포함되어 있으면 프로시저 단위 실행은 코드를 실행한 다음, 호출된 함수가 반환된 후 코드 첫 번째 줄에서 실행을 일시 중단합니다.
Shift+F11 프로시저 나가기 프로시저 나가기는 코드를 계속 실행하고 현재 함수가 반환될 때 실행을 일시 중단합니다. 디버거가 현재 함수를 건너뜁니다.

특정 위치 또는 함수까지 실행

검사할 코드를 정확히 알고 있거나 디버깅을 시작할 위치를 알고 있는 경우 특정 위치 또는 함수까지 직접 실행하는 것이 좋습니다.

  • 중단점을 다시 사용하려는 경우 중단점을 설정하는 것이 가장 좋습니다.
  • 다른 메서드는 편의를 위함이며 임시 중단점 설정과 비슷합니다.

코드의 중단점까지 실행

코드에 간단한 중단점을 설정하려면 실행을 일시 중단하려는 코드 줄 옆에 있는 맨 왼쪽 여백을 선택합니다. 또한 줄을 선택한 다음, F9 키를 선택하고, 디버그>중단점 설정/해제를 선택하거나 마우스 오른쪽 단추를 클릭하여 중단점>중단점 삽입을 선택할 수 있습니다. 중단점이 코드 줄 옆의 왼쪽 여백에 빨간 점으로 나타납니다. 디버거는 줄이 실행되기 직전에 실행을 일시 중단합니다.

Screenshot that shows how to set a breakpoint.

Screenshot that shows how to set a breakpoint.

Visual Studio에서 중단점은 조건부 중단점 및 추적점과 같은 다양한 기능을 제공합니다. 자세한 내용은 중단점 사용을 참조하세요.

함수 중단점까지 실행

지정한 함수에 도달할 때까지 실행되도록 디버거를 설정할 수 있습니다. 함수 이름을 지정하거나 호출 스택에서 함수를 선택할 수 있습니다.

이름으로 함수 중단점을 지정하려면:

  1. 디버그>새 중단점>함수 중단점을 선택합니다.

  2. 새 함수 중단점 대화 상자에서 함수 이름을 입력하고 언어를 선택합니다.

    Screenshot that shows the New Function Breakpoint dialog.

    Screenshot that shows the New Function Breakpoint dialog.

  3. 확인을 선택합니다.

함수가 오버로드되거나 둘 이상의 네임스페이스에 있는 경우 중단점 창에서 원하는 것을 선택할 수 있습니다.

Screenshot that shows breakpoints window.

Screenshot that shows breakpoints window.

호출 스택에서 함수 중단점 선택하려면:

  1. 디버깅하는 동안 디버그>Windows>호출 스택을 선택하여 호출 스택 창을 엽니다.

  2. 호출 스택 창에서 함수를 마우스 오른쪽 단추로 클릭하고 커서까지 실행을 선택하거나 Ctrl+F10을 선택합니다.

호출 스택을 시각적으로 추적하는 방법에 관한 내용은 디버그하는 동안 호출 스택의 메서드 매핑을 참조하세요.

커서 위치까지 실행

커서 위치까지 실행하려면 소스 코드 또는 호출 스택 창에서 중단하려는 줄을 선택한 다음, 마우스 오른쪽 단추를 클릭하여 커서까지 실행을 선택하거나 Ctrl+F10을 선택합니다. 커서까지 실행을 선택하는 것은 임시 중단점을 설정하는 것과 같습니다.

커서 위치까지 강제 실행

커서 위치까지 실행하려면 소스 코드 또는 호출 스택 창에서 중단하려는 줄을 선택한 다음, 마우스 오른쪽 단추를 클릭하여 커서까지 강제 실행을 선택합니다. 커서까지 강제 실행을 선택하면 디버거가 커서가 위치한 코드 줄에 도달할 때까지 중단점과 첫째 예외를 모두 건너뜁니다.

실행하려면 클릭

디버거가 일시 중지된 동안 소스 코드 또는 디스어셈블리 창의 문을 마우스로 가리키고 여기까지 실행 녹색 화살표를 선택할 수 있습니다. 실행하려면 클릭을 사용하는 것은 임시 중단점 설정과 비슷합니다.

Screenshot that shows Run to Click and the green arrow.

참고 항목

클릭한 줄까지 실행은 Visual Studio 2017부터 사용할 수 있습니다.

강제 실행 클릭

디버거가 일시 중지된 동안 Shift 키를 누른 채 소스 코드의 문을 마우스로 가리킨 다음, 여기까지 강제 실행(이중 녹색 화살표)을 선택할 수 있습니다. 이 옵션을 선택하면 애플리케이션이 Visual Studio 디버거를 연결하고 커서 위치에서 일시 중지합니다. 실행 중에 발견된 중단점과 첫째 예외는 일시적으로 사용되지 않습니다.

Screenshot that shows Force Run to Click.

참고 항목

클릭할 때까지 강제 실행은 Visual Studio 2022부터 사용할 수 있습니다.

수동으로 코드 중단

실행 중인 앱에서 사용 가능한 다음 코드 줄을 중단하려면 디버그>모두 중단을 선택하거나 Ctrl+Alt+중단을 선택합니다.

사용자 코드가 아닌 코드 디버깅

기본적으로 디버거는 내 코드만이라고 하는 설정을 사용하여 앱 코드만 디버깅하려고 합니다. 이 기능이 다양한 프로젝트 형식과 언어에 대해 작동하는 방식과 이를 사용자 지정하는 방법에 관한 자세한 내용은 내 코드만을 참조하세요.

디버깅하는 동안 프레임워크 코드, 타사 라이브러리 코드 또는 시스템 호출을 보려면 내 코드만을 사용하지 않을 수 있습니다. 도구(또는 디버그) >옵션>디버깅에서 내 코드만 사용 확인란의 선택을 취소합니다. 내 코드만을 사용하지 않는 경우 디버거 창에 사용자 코드가 아닌 코드가 표시되고 디버거가 사용자가 아닌 코드를 한 단계씩 실행할 수 있습니다.

참고

디바이스 프로젝트에 대해서는 내 코드만이 지원되지 않습니다.

시스템 코드 디버깅

Microsoft 시스템 코드에 대한 디버깅 기호를 로드했고 내 코드만을 사용하지 않은 경우, 다른 모든 호출과 마찬가지로 시스템 호출을 한 단계씩 코드 실행할 수 있습니다.

Visual Studio 2022 버전 17.7을 시작으로, 디버깅 기호를 수동으로 로드할 필요 없이 외부 코드로 단계 넘어갈 때 .NET 코드를 오토디컴파일할 수 있습니다. 자세한 내용은 디버깅하는 동안 .NET 어셈블리에서 소스 코드 생성하기 섹션을 참조하세요.

Microsoft 기호 로드에 관해 알아보려면 기호 파일 위치 및 로드 옵션 구성을 참조하세요.

특정 시스템 구성 요소에 대한 기호를 로드하려면

  1. 디버그하는 동안 디버그>Windows>모듈을 선택하거나 Ctrl+Alt+U를 눌러 모듈 창을 엽니다.

  2. 모듈 창에서 어떤 모듈이 기호 상태 열에 기호를 로드했는지 알 수 있습니다. 기호를 로드하려는 모듈을 마우스 오른쪽 단추로 클릭한 다음, 기호 로드를 선택합니다.

한 단계씩 관리 코드의 속성 및 연산자 실행

기본적으로 디버거는 관리 코드의 속성과 연산자를 건너뜁니다. 대부분의 경우 이 동작은 더 나은 디버깅 환경을 제공합니다. 속성이나 연산자를 한 단계씩 코드 실행하는 기능을 사용하지 않으려면 디버그>옵션을 선택합니다. 디버깅>일반 페이지에서 속성 및 연산자 프로시저 단위 실행(관리 전용) 확인란의 선택을 취소합니다.

포인터를 이동하여 실행 흐름 변경

노란색 실행 포인터를 이동하여 실행할 다음 문을 변경할 수 있습니다. 중단 모드에서 이 기능을 사용할 수 있습니다.

이는 고급 디버거 기능에 해당합니다. 자세한 내용은 실행 포인터 이동을 참조하세요.