다음을 통해 공유


중단점: Visual Studio 디버거에서 원하는 시기 및 위치에서 적중 횟수, 호출 스택 함수 및 조건을 사용하여 중단

소스 줄, 어셈블리 명령 및 호출 스택 함수에 중단점을 설정합니다. 조건, 적중 횟수 및 실행 위치를 지정합니다. 추적점을 사용하여 인쇄합니다. 중단점을 저장하고 가져옵니다.

콘텐츠

Create breakpoints that break when you want

Set a breakpoint at a source line, assembly instruction, or call stack function

Access the advanced functionality of breakpoints

Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Print to the Output window with tracepoints

Manage breakpoints in the Breakpoints window

Troubleshoot breakpoints

Breakpoint Glyphs Reference

원할 때 중단되는 중단점 만들기

소스 파일 위치가 적중될 때마다 디버거 실행을 중단하는 표준 중단점은 개발자의 도구 상자에서 가장 중요한 디버깅 기술 중 하나입니다. Visual Studio에서는 표준 중단점 이상의 기능을 제공하여 중단점이 실행되는 조건 및 위치를 세밀하게 제어할 수 있도록 합니다.

  • 프로그램이 호출 스택에 있는 함수로 돌아갈 때 실행을 중단하는 런타임 중단점을 설정하여 일련의 긴 프로시저 나가기 명령을 방지할 수 있습니다.

  • 코드의 루프가 특정 횟수를 반복한 후 잘못된 동작을 시작하는 것으로 의심되는 경우, 반복적으로 F5 키(디버그, 계속)를 눌러 반복 수준에 강제로 도달하는 대신 관련 코드 줄에 지정된 횟수만큼 적중된 후 실행을 중지하도록 중단점을 설정할 수 있습니다.

  • 코드 식을 사용하여 중단점이 실행되는 정확한 조건을 지정할 수 있습니다.

중단점 창을 사용하여 많은 수의 중단점에 대한 상태와 동작을 관리할 수 있습니다. 공통적이거나 특별히 복잡한 문제를 진단하기 위해 중단점의 시퀀스를 신중하게 생성한 경우 중단점 창 가져오기 및 내보내기 명령을 사용하여 이러한 중단점을 저장하거나 공유할 수 있습니다.

경고

혼합 모드(네이티브 및 관리) 코드를 디버깅할 때는 시스템 구성 요소에 중단점을 설정하지 마십시오.혼합 모드 디버깅 도중 시스템 구성 요소에 중단점을 설정하면 공용 언어 런타임이 중단되고 디버거 응답이 중지될 수 있습니다.

맨 위로 이동Contents

소스 줄, 어셈블리 명령 또는 호출 스택 함수에 중단점 설정

  • Set a breakpoint in a source file • Set a breakpoint at a function return in the Call Stack window • Set a breakpoint at an assembly instruction in the Disassembly window

소스 파일에서 중단점 설정

소스 창에서 표준 중단점을 설정하는 두 가지 방법은 다음과 같습니다.

  • 창의 여백에서 중단하려는 줄을 두 번 클릭합니다.

    또는

  • 줄을 선택하고 F9 키를 선택합니다.

호출 스택 창의 중단점

여백에 중단점 아이콘이 나타납니다.

코드 실행 중에 중단점을 시각적으로 추적하려면 Visual Studio에서 디버깅하는 동안 호출 스택의 맵 메서드을 참조하십시오.

맨 위로 이동 Set a breakpoint at a source line, assembly instruction, or call stack function

맨 위로 이동Contents

호출 스택 창에서 함수 반환에 대한 중단점 설정

호출 스택 창에서 중단점을 설정하여 호출 함수가 반환되는 명령이나 줄에서 실행을 중단할 수 있습니다. 디버거는 중단 모드에 있어야 합니다.

  • 호출 스택 창(바로 가기 키: Ctrl + Alt + C)을 열고 중단할 호출 함수를 선택합니다.

  • 상황에 맞는 메뉴에서 중단점, 중단점 삽입을 선택하거나 바로 가기 키: F9를 사용합니다.

함수 호출 이름 옆의 왼쪽 여백에 중단점 기호가 빨간 단색 점으로 표시됩니다.

호출 스택 창의 중단점

중단점 창을 열면(바로 가기 키: Ctrl+Alt+B) 중단점이 함수의 다음 실행 명령에 해당하는 메모리 위치가 포함된 주소 중단점으로 나타납니다. 디버거는 해당 명령에서 실행을 중단합니다.

중단점 창에서 호출 스택 중단점

코드 실행 중에 중단점을 시각적으로 추적하려면 Visual Studio에서 디버깅하는 동안 호출 스택의 맵 메서드을 참조하십시오.

맨 위로 이동 Set a breakpoint at a source line, assembly instruction, or call stack function

맨 위로 이동 Contents

디스어셈블리 창에서 어셈블리 명령에 대한 중단점 설정

어셈블리 명령에 중단점을 설정하려면 디버거가 중단 모드여야 합니다.

  1. 디스어셈블리 창을 엽니다(바로 가기 키: Ctrl + Alt + D).

  2. 다음 작업 중 하나를 수행합니다.

    1. 창의 여백에서 중단하려는 줄을 두 번 클릭합니다.

      또는

    2. 줄을 선택하고 F9 키를 선택합니다.

맨 위로 이동 Set a breakpoint at a source line, assembly instruction, or call stack function

맨 위로 이동 Contents

중단점의 고급 기능 액세스

중단점 상황에 맞는 메뉴

소스 창, 호출 스택 창 또는 디스어셈블리 창에서 중단점에 대한 상황에 맞는 메뉴를 열고 속성을 선택합니다.

중단점 창에서 중단점 행을 선택하고 상황에 맞는 메뉴를 엽니다. 조건 열에서 직접 일부 조건을 설정할 수도 있습니다.

맨 위로 이동 Contents

적중 횟수, 식 계산, 실행 위치 또는 데이터 변경 기준으로 중단점이 실행되는 조건 지정

  • Specify a hit count at which the breakpoint executes • Specify a breakpoint condition using a code expression • Specify the devices, processes, or threads that a breakpoint executes on • Set a data change breakpoint (native C++ only)

중단점이 실행되는 적중 횟수 지정

적중 횟수는 중단점이 적중되는 횟수를 추적합니다. 적중 횟수가 지정된 값과 같거나, 지정된 값의 배수이거나, 지정된 값보다 크거나 같을 때 중단점이 실행되도록 값과 조건을 설정합니다. 적중 횟수 및 조건을 지정하려면

  1. 중단점 적중 횟수 대화 상자를 엽니다.

    1. 소스, 디스어셈블리 또는 호출 스택에서 중단점이 포함된 줄을 선택한 후 상황에 맞는 메뉴에서 중단점, 적중 횟수를 선택합니다.

      또는

    2. 중단점 창에서 중단점 행을 선택한 후 상황에 맞는 메뉴에서 적중 횟수를 선택합니다.

      중단점 적중 횟수 대화 상자

  2. 조건을 선택하고 적중 횟수를 입력합니다.

적중 횟수 조건은 특정 반복 횟수에서 루프를 중단하려는 경우 유용합니다. 중단점이 적중되는 횟수를 계산해야 하지만 실행을 중단하지 않으려는 경우 매우 큰 숫자를 지정할 수도 있습니다.

지정된 적중 횟수는 디버깅 세션에서만 유지됩니다. 디버깅 세션이 끝나면 적중 횟수가 0으로 다시 설정됩니다.

맨 위로 이동 Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

맨 위로 이동 Contents

코드 식을 사용하여 중단점 조건 지정

중단점 조건은 중단점에 도달할 때 디버거에서 계산하는 식입니다. 조건을 충족하는 경우 디버거가 실행을 중단합니다.

디버거에서 인식하는 모든 유효한 식은 조건이 될 수 있습니다. 예를 들어 뱅킹 프로그램에서는 balance < 0과 같은 중단점 조건을 설정할 수 있습니다. 유효한 식에 대한 자세한 내용은 디버거에서 사용하는 식을 참조하십시오.

중단점 조건을 지정하려면

  1. 중단점에 대한 상황에 맞는 메뉴를 열고 조건을 선택합니다.

  2. 중단점 조건 대화 상자의 조건 상자에 올바른 식을 입력합니다.

  3. 식을 만족할 때 중단하려면 참인 경우를 선택하고, 식의 값이 변경되었을 때 중단하려면 변경된 경우를 선택합니다.

디버거는 처음으로 중단점에 도달할 때까지는 식을 계산하지 않습니다. 네이티브 코드에 대해 변경된 경우를 선택하는 경우 디버거는 조건의 첫 번째 계산을 변경으로 간주하지 않으므로 첫 번째 계산에서는 중단점이 적중되지 않습니다. 관리 코드에 대해 변경된 경우를 선택하는 경우에는 변경된 경우를 선택한 후의 첫 번째 계산에서 중단점이 적중됩니다.

잘못된 구문을 사용하여 중단점 조건을 설정하면 즉시 경고 메시지가 나타납니다. 올바르지만 의미가 잘못된 구문을 사용하여 중단점 조건을 지정하면 중단점이 처음 적중될 때 경고 메시지가 나타납니다. 두 경우 모두 잘못된 중단점이 적중되면 디버거에서 실행을 중단합니다. 조건이 올바르고 false가 되는 경우에만 중단점을 건너뜁니다.

맨 위로 이동 Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

맨 위로 이동 Contents

중단점이 실행되는 장치, 프로세스 또는 스레드 지정

  1. 중단점에 대한 상황에 맞는 메뉴를 열고 필터를 선택합니다.

    중단점 필터 대화 상자

  2. 대화 상자의 지시에 따라 필터 조건을 지정합니다.

맨 위로 이동 Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

맨 위로 이동 Contents

데이터 변경 중단점 설정(네이티브 C++만 해당)

데이터 중단점을 사용하면 특정 메모리 위치에 저장된 값이 기록될 때 실행을 중단할 수 있습니다. 값을 쓰지 않고 읽기만 할 때는 실행이 중단되지 않습니다. 데이터 중단점을 설정하려면 디버거가 중단 모드여야 합니다.

  1. 디버그 메뉴에서 새 중단점, 새 데이터 중단점을 선택합니다.

    또는

    중단점 창 메뉴에서 새로 만들기, 새 데이터 중단점을 선택합니다.

    새 중단점 대화 상자

  2. 주소 상자에 메모리 주소나 메모리 주소를 계산하는 식을 입력합니다.

    예를 들어, avar 변수의 내용이 바뀔 때 실행을 중단하려면 &avar을 입력하여 합니다.

  3. 바이트 계산 상자에 디버거에서 조사할 바이트 수를 입력합니다.

    예를 들어, 4를 입력하면 디버거에서 &myFunction부터 4바이트를 조사하고 이러한 바이트의 값이 변경되면 실행을 중단합니다.

데이터 중단점을 설정하려면 디버거가 중단 모드여야 합니다.

다음 조건에서는 데이터 중단점이 작동하지 않습니다.

  • 디버깅 중이 아닌 프로세스가 메모리 위치에 쓰는 경우

  • 둘 이상의 프로세스가 메모리 위치를 공유하는 경우

  • 커널 내에서 메모리 위치가 업데이트되는 경우 예를 들어 32비트 Windows ReadFile 함수에 메모리가 전달된 경우 커널 모드에서 메모리가 업데이트되므로 메모리에 쓸 때 디버거는 실행을 중단하지 않습니다.

변수의 주소는 디버깅 세션마다 달라집니다. 이러한 이유로 데이터 중단점은 각 디버깅 세션이 끝날 때 자동으로 해제됩니다.

데이터 중단점을 지역 변수에 설정한 경우에는 함수가 종료되어도 데이터 중단점이 설정된 상태로 유지됩니다. 그러나 설정된 메모리 주소의 의미는 달라집니다. 따라서 이러한 중단점의 결과는 예측할 수 없습니다. 지역 변수에 데이터 중단점을 설정한 경우에는 함수가 종료되기 전에 중단점을 제거하거나 해제하는 것이 좋습니다.

Visual Studio에서는 솔루션당 최대 4개의 데이터 중단점을 지원합니다.

맨 위로 이동 Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

맨 위로 이동Contents

추적점을 사용하여 출력 창에 인쇄

추적점은 중단점을 사용하는 또 다른 방법입니다. 추적점은 출력 창에 메시지를 인쇄하는 중단점입니다. 추적점은 프로그래밍 언어의 임시 추적 문처럼 작동할 수 있습니다.

기존 중단점에서 메시지를 인쇄하려면 중단점에 대한 상황에 맞는 메뉴를 열고 적중될 때를 선택합니다.

중단점이 적중될 때 대화 상자에서 인쇄할 메시지를 지정합니다.

중단점이 적중될 때 대화 상자

메시지 지정

DebuggerDisplayAttribute 구문을 사용하여 메시지에 프로그래밍 정보를 포함할 수 있습니다(DebuggerDisplayAttribute 참조). 몇 가지 예는 다음과 같습니다.

  • In function '{$FUNC}', on thread '{$TID}'

  • Used variable: {varName}, function name: {functionName($FUNC)}

중단점이 적중될 때 대화 상자에 설명된 모든 키워드를 사용할 수 있습니다. 또한 이 대화 상자에 표시되지 않는 다른 두 키워드를 사용할 수 있습니다. 그 중에서 $TICK은 현재 CPU 틱 수를 삽입하고 $FILEPOS는 현재 파일 위치를 삽입합니다.

추적점 동작 지정

추적점이 적중될 때 실행을 중단하려면 계속 실행 확인란을 선택 취소합니다. 계속 실행을 선택하면 실행이 중단되지 않습니다. 두 경우 모두 메시지가 인쇄됩니다.

추적점 해제

추적점을 일시적으로 해제하려면 메시지 표시 확인란을 선택 취소합니다.

맨 위로 이동Contents

중단점 창에서 중단점 관리

  • Export and import breakpoints • Label breakpoints

중단점 창의 중단점을 설정하고 구성하고 관리하는 거의 모든 기능을 소스 창, 호출 스택 창 및 디스어셈블리 창의 개별 중단점 위치에서 사용할 수 있습니다. 하지만 중단점 창은 모든 중단점을 관리하는 중심적인 곳이므로 중단점이 중요한 대규모 솔루션이나 복잡한 디버깅 시나리오에서 특히 유용할 수 있습니다. 중단점 집합의 상태 및 위치를 저장하거나 공유해야 하는 경우 중단점 창에서만 중단점 파일을 저장하고 가져올 수 있습니다.

맨 위로 이동 Manage breakpoints in the Breakpoints window

맨 위로 이동 Contents

중단점에 레이블 지정

중단점 레이블은 중단점 목록을 정렬하고 필터링하기 위해 중단점 창에서만 사용됩니다. 중단점에 레이블을 추가하려면 중단점 행을 선택한 다음 상황에 맞는 메뉴에서 레이블을 선택합니다.

중단점 문제 해결

  • The debugger can't determine the source file for a breakpoint • The debugger can't locate the correct version of the source file for a breakpoint • Breakpoints don't work in a DLL

디버거가 중단점의 소스 파일을 확인할 수 없는 경우

프로젝트에 이름이 같은 소스 파일이 여러 개 있는 경우 디버거에서 중단점이 설정된 파일을 확인하는 데 문제가 있을 수 있습니다. 이러한 문제는 연결하려는 디버그 라이브러리의 구성 요소와 동일한 이름의 모듈을 만드는 경우에 많이 발생합니다.

이 문제를 해결하려면 소스 창에서 중단점을 선택하고 상황에 맞는 메뉴에서 위치를 선택합니다.

파일 중단점 대화 상자

파일 상자에 올바른 파일의 전체 경로를 입력합니다.

맨 위로 이동Troubleshoot breakpoints

맨 위로 이동Contents

디버거가 중단점의 올바른 소스 파일 버전을 찾을 수 없는 경우

소스 파일이 변경되었고 소스가 디버깅 중인 코드와 더 이상 일치하지 않는 경우 디버거는 소스 파일이 있더라도 중단점에 해당하는 소스 파일을 찾을 수 있습니다.

  1. 디버깅 중인 버전과 일치하지 않는 소스 코드를 Visual Studio에서 표시하려면 디버그, 옵션 및 설정을 선택합니다. 디버깅/일반 페이지에서 원래 버전과 정확하게 일치하는 소스 코드만 사용 옵션을 선택 취소합니다.

  2. 소스 파일에 중단점을 바인딩할 수도 있습니다. 중단점을 선택하고 상황에 맞는 메뉴에서 위치를 선택합니다. 파일 중단점 대화 상자에서 소스 코드가 원래 버전과 일치하지 않아도 됨을 선택합니다.

맨 위로 이동Troubleshoot breakpoints

맨 위로 이동Contents

중단점이 DLL에서 작동하지 않는 경우

코드가 속한 모듈에 대한 디버그 정보가 디버거에 로드되지 않았으면 소스 파일에서 중단점을 설정할 수 없습니다. 이러한 문제의 증상으로 **중단점을 설정하지 못했습니다.**와 같은 메시지가 나타날 수 있습니다. 중단점 위치에 경고 중단점 문자 모양이 표시됩니다. 하지만 이러한 경고 중단점은 코드가 로드될 때 실제 중단점이 됩니다.

맨 위로 이동 Troubleshoot breakpoints

맨 위로 이동Contents

중단점 문자 모양 참조

소스 창과 디스어셈블리 창에서는 왼쪽 여백에 문자 모양이라는 기호를 표시하여 중단점 위치를 나타냅니다. 다음 표에서는 이러한 중단점 문자 모양을 보여 줍니다.

중단점 문자 모양 위에 마우스를 놓으면 더 자세한 정보가 있는 중단점 팁이 나타납니다. 이 정보는 특히 오류 및 경고 중단점에 유용합니다.

문자 모양

설명

디버그 문자 모양 1

일반 중단점. 채워진 중단점 문자 모양은 중단점이 설정되었음을 나타냅니다. 빈 중단점 문자 모양은 중단점이 해제되었음을 나타냅니다.

디버그 문자 모양 2

고급 중단점. 설정/해제. + 기호는 중단점에 하나 이상의 고급 기능(예: 조건, 적중 횟수 또는 필터)이 연결되어 있음을 나타냅니다.

디버그 문자 모양 3

매핑된 중단점. 설정/해제. 중단점이 ASP/ASP.NET 코드에 설정되고 해당 HTML 페이지의 중단점에 매핑되거나, 서버 쪽 스크립트 파일에 설정되고 해당 클라이언트 쪽 스크립트 파일에 매핑됩니다.

디버그 문자 모양 4

추적점. 설정/해제. 이 지점에 적중되면 지정된 작업이 수행되지만 프로그램 실행이 중단되지는 않습니다.

디버그 문자 모양 5

고급 추적점. 설정/해제. + 기호는 추적점에 하나 이상의 고급 기능(예: 조건, 적중 횟수 또는 필터)이 연결되어 있음을 나타냅니다.

디버그 문자 모양 6

매핑된 추적점. 설정/해제. 이 추적점은 ASP/ASP.NET 코드에 설정되며 해당하는 HTML 페이지의 추적점에 매핑됩니다.

디버그 문자 모양 7

중단점 또는 추적점 오류. X는 오류 조건으로 인해 중단점이나 추적점을 설정할 수 없음을 나타냅니다.

디버그 문자 모양 8

중단점 또는 추적점 경고. 느낌표는 일시적인 조건으로 인해 중단점이나 추적점을 설정할 수 없음을 나타냅니다. 일반적으로 중단점 또는 추적점 위치의 코드가 로드되지 않았음을 의미합니다. 또한 프로세스에 연결하고 해당 프로세스에 대한 기호가 로드되지 않은 경우에도 표시될 수 있습니다. 코드나 기호가 로드되면 중단점이 설정되고 중단점 문자 모양이 변경됩니다.

맨 위로 이동Contents

참고 항목

개념

Visual Studio에서 디버깅 시작, 중단, 단계별 실행, 실행 및 중지