다음을 통해 공유


올바른 유형의 중단점 사용

이 문서에서는 Visual Studio에서 다양한 유형의 중단점을 사용하여 디버깅 효율성을 개선하는 방법을 보여 줍니다. 코드 실행 일시 중지, 정보 로깅, 변수 상태의 변경 내용 추적 등 중단점을 적용할 수 있는 다양한 시나리오에 대해 설명합니다. 이 문서에서는 조건부 중단점, 추적점, 데이터 중단점, 종속 중단점 및 임시 중단점을 설정하는 방법을 설명합니다. 함수 중단점 설정에 대한 자세한 지침도 포함되어 있습니다. 이 가이드는 Visual Studio에서 효과적인 디버깅을 위해 중단점을 활용하려는 개발자에게 필수적입니다.

Visual Studio에서 중단점을 사용하는 데 익숙하지 않은 경우, 이 문서를 읽기 전에 중단점 시작하기를 참조하세요.

이 설명서를 사용하여 최상의 환경을 제공하려면 문서 맨 위에 있는 목록에서 원하는 개발 언어 또는 런타임을 선택합니다.

시나리오

다음 표에서는 중단점에 대한 일반적인 디버깅 시나리오와 시나리오에 권장되는 중단점 유형을 보여 줍니다.

시나리오 설명
코드 실행을 멈추고 버그가 있을 수 있는 코드 줄을 검사하려면 어떻게 해야 하나요? 중단점을 설정합니다. 자세한 내용은 중단점 시작하기를 참조하세요.
내 변수에 예기치 않은 값이 있나요? 또는 특정 상태에 도달하면 내 앱을 검사하시겠습니까? 조건부 중단점을 시도하여 조건부 논리를 사용하여 중단점이 활성화되는 위치와 시기를 제어합니다. 중단점을 마우스 오른쪽 단추로 클릭하여 조건을 추가합니다. 변수가 예기치 않은 값과 같으면 조건을 true로 설정합니다. 자세한 내용은 중단점 조건 참조하세요.
코드를 수정하거나 중지하지 않고 구성 가능한 조건에서 출력 창에 정보를 기록하려면 어떻게 해야 하나요? 추적점을 사용하면 코드를 수정하거나 중지하지 않고 구성 가능한 조건에서 출력 창에 정보를 기록할 수 있습니다. 자세한 내용은 Visual Studio 디버거에서 추적점을 사용하는 방법을 참조하세요.
내 변수 값이 변경되는 시기를 어떻게 알 수 있나요? C++의 경우 데이터 중단점설정합니다.
.NET Core 3 이상을 사용하는 앱의 경우 데이터 중단점설정할 수도 있습니다.
그렇지 않으면 C# 및 F#에 대해서만 조건부 중단점 사용하여 개체 ID를 추적할있습니다.
다른 중단점이 적중된 경우에만 실행을 중단하려면 어떻게 해야 하나요? 다른 중단점이 처음 적중된 경우에만 실행을 중단하는 종속 중단점을 설정합니다. 자세한 내용은 종속 중단점참조하세요.
중단점을 한 번만 설정할 수 있나요? 코드를 한 번만 중단시킬 수 있는 임시 중단점을 설정합니다. 자세한 내용은 임시 중단점참조하세요.
특정 반복 시 루프 내에서 코드를 일시 중지할 수 있나요? 다른 중단점이 처음 적중된 경우에만 실행을 중단하는 종속 중단점을 설정합니다. 자세한 내용은 적중 횟수참조하세요.
함수 이름을 알고 있지만 해당 위치는 알 수 없는 경우 함수 시작 시 코드를 일시 중지할 수 있나요? 함수 중단점을 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 함수 중단점 설정을 참조하세요.
동일한 이름의 여러 함수가 시작될 때 코드를 일시 중지할 수 있나요? 이름이 같은 함수(다른 프로젝트의 오버로드된 함수 또는 함수)가 여러 개 있는 경우 함수 중단점사용할 수 있습니다.

중단점 작업 및 추적점

추적점은 메시지를 출력 창에 출력하는 중단점입니다. 추적점은 프로그래밍 언어의 임시 추적 문처럼 작동할 수 있으며 코드 실행을 일시 중지하지 않습니다. 중단점 설정 창에서 특수 작업을 설정하여 추적점을 만듭니다. 자세한 지침은 Visual Studio 디버거에서 추적점 사용을 참조하세요.

중단점 조건

조건을 설정하여 중단점이 실행되는 시기와 위치를 제어할 수 있습니다. 조건은 디버거가 인식하는 유효한 식일 수 있습니다. (유효한 식에 대한 자세한 내용은 디버거 식을 참조하세요.)

중단점 조건을 설정하려면

  1. 중단점 기호를 마우스 오른쪽 단추로 클릭하고 조건 선택하거나 Alt + F9C누릅니다. 또는 중단점 기호를 마우스로 가리키고 설정 아이콘을 선택한 다음 중단점 설정 창에서 조건 선택합니다.

    코드 줄 옆의 맨 왼쪽 여백을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 조건부 중단점 삽입을 선택하여 새 조건부 중단점을 설정할 수도 있습니다.

    중단점을 마우스 오른쪽 단추로 클릭하고 설정선택한 다음 조건 선택하여 중단점 창에서 조건을 설정할 수도 있습니다.

    중단점 설정

    중단점 설정

  2. 드롭다운에서 조건식 , 적중 횟수 또는 필터 선택하고 그에 따라 값을 설정합니다.

  3. 닫기를 선택하거나 Ctrl+Enter 눌러 중단점 설정 창을 닫습니다. 또는 중단점 창에서 확인 선택하여 대화 상자를 닫습니다.

조건이 설정된 중단점은 소스 코드에 + 기호와 중단점 창으로 나타납니다.

조건식 만들기

조건식 선택하면 두 조건 중에서 선택할 수 있습니다. true 또는 변경된 경우. 식이 충족될 때 중단하려면 이 true일 때을 선택하거나 값이 변경될 때 중단하려면 변경될 때 선택하십시오.

다음 예제에서 중단점은 testInt 값이 4경우에만 적중됩니다.

중단점 조건이 true인

중단점 조건이 true

다음 예제에서 중단점은 testInt 값이 변경되는 경우에만 적중됩니다.

중단점 변경 시

중단점 변경 시

잘못된 구문으로 중단점 조건을 설정하면 경고 메시지가 나타납니다. 유효한 구문이지만 잘못된 의미 체계를 사용하여 중단점 조건을 지정하면 중단점이 처음 적중되면 경고 메시지가 나타납니다. 두 경우 모두 디버거가 잘못된 중단점에 도달하면 중단됩니다. 조건이 유효하고 false으로 평가될 때에만 중단점이 건너뜁니다.

메모

변경된 필드의 경우 디버거는 조건의 첫 번째 평가를 변경으로 간주하지 않으므로 첫 번째 평가에서 중단점에 도달하지 않습니다.

조건식에서 개체 ID 사용(C# 및 F#에만 해당)

특정 개체의 동작을 관찰하려는 경우가 있습니다. 예를 들어 개체가 컬렉션에 두 번 이상 삽입된 이유를 확인할 수 있습니다. C# 및 F#에서는 참조 형식의 특정 인스턴스에 대한 개체 ID를 만들고 중단점 조건에서 사용할 수 있습니다. 개체 ID는 CLR(공용 언어 런타임) 디버깅 서비스에 의해 생성되고 개체와 연결됩니다.

개체 ID를 만들려면

  1. 개체를 만든 후 코드에서 중단점을 설정합니다.

  2. 디버깅을 시작하고 실행이 중단점에서 일시 중지되면 디버그>Windows>로컬을 선택하거나 Ctrl + Alt + V, L을 눌러 로컬 창을 엽니다.

    Locals 창에서 특정 개체 인스턴스를 찾아 마우스 오른쪽 단추로 클릭하고 개체 ID를 선택합니다.

    Locals 창에 $에 더해진 어떤 숫자가 보일 것입니다. 개체 ID입니다.

  3. 조사하려는 지점에 새 중단점을 추가합니다. 예를 들어 개체를 컬렉션에 추가할 때입니다. 중단점을 마우스 오른쪽 단추로 클릭하고 조건 선택합니다.

  4. 조건식 필드에서 개체 ID를 사용합니다. 예를 들어 변수 item 컬렉션에 추가할 개체인 경우 true 선택하고 item == $<n>입력합니다. 여기서 <n> 개체 ID 번호입니다.

    해당 개체를 컬렉션에 추가할 때 실행이 중단됩니다.

    개체 ID를 삭제하려면 Locals 창에서 변수를 마우스 오른쪽 단추로 클릭하고 개체 ID 삭제를 선택합니다.

메모

개체 ID는 약한 참조를 생성하며, 개체가 가비지 수집 대상이 되는 것을 방지하지 않습니다. 현재 디버깅 세션에만 유효합니다.

적중 횟수 조건 설정

코드의 루프가 특정 수의 반복 후에 오작동하기 시작하는 것으로 의심되는 경우 반복에 도달하기 위해 F5 반복해서 누르지 않고도 해당 적중 횟수 후에 실행을 중지하도록 중단점을 설정할 수 있습니다.

중단점 설정 창에서 조건적중 횟수를 선택한 다음 반복 횟수를 지정합니다. 다음 예제에서는 중단점이 다른 모든 반복에 적중되도록 설정됩니다.

중단점 적중 횟수

중단점 적중 횟수

필터 조건 설정

지정된 디바이스 또는 각각의 지정된 프로세스와 스레드에서만 중단점이 작동하도록 제한할 수 있습니다.

중단점 설정 창의 조건필터선택한 다음 다음 식 중 하나 이상을 입력합니다.

  • MachineName = "name"
  • ProcessId = 값
  • ProcessName = "name"
  • 스레드 ID = 값
  • ThreadName = "이름"

문자열 값을 큰따옴표로 묶습니다. AND(&), OR(||), !(NOT) 및 괄호를 사용하여 절을 결합할 수 있습니다.

함수 중단점 설정

함수가 호출되면 실행을 중단할 수 있습니다. 예를 들어 함수 이름을 알고 있지만 해당 위치는 알 수 없는 경우에 유용합니다. 이름이 같은 함수가 있고 모두 중단하려는 경우에도 유용합니다(예: 다른 프로젝트의 오버로드된 함수 또는 함수).

함수 중단점을 설정하려면

  1. 디버그,>새 중단점,>함수 중단점을 선택하거나, Ctrl + K, B을 누릅니다.

    중단점 창에서 >함수 중단점을 선택할 수도 있습니다.

  2. 새 함수 중단점 대화 상자의 함수 이름 상자에 함수 이름을 입력합니다.

    함수 사양 범위를 좁히려면 다음을 수행합니다.

    • 정규화된 함수 이름을 사용합니다.

      예: Namespace1.ClassX.MethodA()

    • 오버로드된 함수의 매개 변수 형식을 추가합니다.

      예: MethodA(int, string)

    • '!' 기호를 사용하여 모듈을 지정합니다.

      예: App1.dll!MethodA

    • 네이티브 C++에서 컨텍스트 연산자를 사용합니다.

      {function, , [module]} [+<line offset from start of method>]

      예: {MethodA, , App1.dll}+2

  3. Language 드롭다운에서 함수의 언어를 선택합니다.

  4. 을 선택한 후 확인을 누르세요.

메모리 주소를 사용하여 함수 중단점 설정(네이티브 C++만 해당)

개체의 주소를 사용하여 클래스의 특정 인스턴스에서 호출하는 메서드에 함수 중단점을 설정할 수 있습니다. 예를 들어 my_class형식의 주소 지정 가능한 개체가 지정된 경우 인스턴스가 호출하는 my_method 메서드에서 함수 중단점을 설정할 수 있습니다.

  1. 클래스 인스턴스가 인스턴스화된 후 어딘가에 중단점을 설정합니다.

  2. 인스턴스의 주소(예: 0xcccccccc)를 찾습니다.

  3. 디버그 를 선택하고 새 중단점>>또는 함수 중단점을 선택하거나, Ctrl + K, B 을 누릅니다.

  4. 함수 이름 상자에 다음을 추가하고 C++ 언어를 선택합니다.

    ((my_class *) 0xcccccccc)->my_method
    

데이터 중단점 설정(.NET Core 3.x 또는 .NET 5 이상)

데이터 중단점은 특정 개체의 속성이 변경되면 실행을 중단합니다.

데이터 중단점을 설정하려면 다음을 수행합니다.

  1. .NET Core 또는 .NET 5+ 프로젝트에서 디버깅을 시작하고 중단점에 도달할 때까지 기다립니다.

  2. 자동, 조사식또는 지역 창에서 속성을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 값이 변경되면 중단을 선택합니다.

    관리되는 데이터 중단점

.NET Core 및 .NET 5 이상에 대한 데이터 중단점은 다음에서 작동하지 않습니다.

  • 도구 설명, 로컬, 자동 또는 조사식 창에서 확장할 수 없는 속성
  • 정적 변수
  • DebuggerTypeProxy 특성이 있는 클래스
  • 구조체 내의 필드

최대 설정 가능 수에 대한 정보는 데이터 중단점 하드웨어 제한을 참조하세요.

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

지정된 메모리 주소에 저장된 값이 변경되면 데이터 중단점이 실행을 중단합니다. 값을 읽지만 변경되지 않으면 실행이 중단되지 않습니다.

데이터 중단점을 설정하려면 다음을 수행합니다.

  1. C++ 프로젝트에서 디버깅을 시작하고 중단점에 도달할 때까지 기다립니다. 디버그 메뉴에서 새 중단점>데이터 중단점을 선택합니다.

    중단점 창에서 >데이터 중단점 선택하거나 자동항목, 조사식또는 로컬 창에서 항목을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 값이 변경되면 중단을 선택할 수 있습니다.

  2. 주소 상자에 메모리 주소 또는 메모리 주소로 계산되는 식을 입력합니다. 예를 들어, 변수 avar의 내용이 변경될 때 중단하도록 &avar을 입력합니다.

  3. 바이트 개수 드롭다운에서 디버거에서 볼 바이트 수를 선택합니다. 예를 들어 4선택하면 디버거는 &avar 시작하는 4바이트를 확인하고 해당 바이트 중 하나라도 값을 변경하면 중단됩니다.

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

  • 디버깅되지 않는 프로세스는 메모리 위치에 씁니다.
  • 메모리 위치는 둘 이상의 프로세스 간에 공유됩니다.
  • 메모리 위치는 커널 내에서 업데이트됩니다. 예를 들어 메모리가 32비트 Windows ReadFile 함수에 전달되면 커널 모드에서 메모리가 업데이트되므로 디버거가 업데이트에서 중단되지 않습니다.
  • 조사식의 크기가 32비트 하드웨어에서 4바이트를 넘고, 64비트 하드웨어에서 8바이트를 넘는 경우입니다. 이는 x86 아키텍처의 제한 사항입니다.

메모

  • 데이터 중단점은 특정 메모리 주소에 따라 달라집니다. 변수의 주소는 한 디버깅 세션에서 다음 디버깅 세션으로 변경되므로 각 디버깅 세션이 끝날 때 데이터 중단점이 자동으로 비활성화됩니다.

  • 지역 변수에 데이터 중단점을 설정하는 경우 함수가 종료될 때 중단점은 계속 사용하도록 설정되지만 메모리 주소는 더 이상 적용되지 않으므로 중단점의 동작을 예측할 수 없습니다. 지역 변수에 데이터 중단점을 설정하는 경우 함수가 종료되기 전에 중단점을 삭제하거나 사용하지 않도록 설정해야 합니다.

데이터 중단점 하드웨어 제한

Windows 커널 및 기본 하드웨어는 데이터 중단점을 설정할 때 다음과 같은 제한이 있습니다. 제한은 설정할 수 있는 최대 데이터 중단점 수를 나타냅니다.

프로세서 아키텍처 데이터 중단점 제한
x64 및 x86 4
ARM64 2
1

종속 중단점 설정

종속 중단점은 다른 중단점이 처음 적중된 경우에만 실행을 중단합니다. 따라서 다중 스레드 애플리케이션 디버깅과 같은 복잡한 시나리오에서는 다른 중단점이 처음 적중된 후 추가 중단점을 구성할 수 있습니다. 이렇게 하면 해당 함수의 중단점이 애플리케이션의 특정 부분에서 호출되는 경우에만 사용하도록 구성할 수 있으므로 게임 루프 또는 유틸리티 API와 같은 일반적인 경로에서 코드를 훨씬 쉽게 디버깅할 수 있습니다.

종속 중단점을 설정하려면

  1. 중단점 기호를 마우스로 가리키고 설정 아이콘을 선택한 다음 중단점 설정 창에서 다음 중단점이 적중된 경우에만 사용하도록 선택합니다.

  2. 드롭다운에서 현재 중단점이 종속될 필수 중단점을 선택하세요.

닫기를 선택하거나 Ctrl+Enter 눌러 중단점 설정 창을 닫습니다. 또는 중단점 창에서 확인 선택하여 대화 상자를 닫습니다. 종속 중단점

마우스 오른쪽 단추로 클릭하는 상황에 맞는 메뉴를 사용하여 종속 중단점을 설정할 수도 있습니다.

  1. 코드 줄 옆의 맨 왼쪽 여백을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 종속 중단점 삽입을 선택합니다.

    의존중단점 컨텍스트

  • 애플리케이션에 중단점이 하나만 있으면 종속 중단점이 작동하지 않습니다.
  • 필수 구성 요소 중단점이 삭제되면 종속 중단점이 일반 줄 중단점으로 변환됩니다.

임시 중단점 설정

이 중단점을 사용하면 코드를 한 번만 중단시킬 수 있습니다. 디버깅할 때 Visual Studio 디버거는 이 중단점에 대해 실행 중인 애플리케이션을 한 번만 일시 중지한 다음 적중된 직후 제거합니다.

임시 중단점을 설정하려면

  1. 중단점 기호를 마우스로 가리키고 설정 아이콘을 선택한 다음 중단점 설정 창에서 도달하면 중단점 제거 선택합니다.

  2. 닫기를 선택하거나 Ctrl+Enter 눌러 중단점 설정 창을 닫습니다. 또는 중단점 창에서 확인 선택하여 대화 상자를 닫습니다.

    임시 중단점

마우스 오른쪽 단추로 클릭하는 상황에 맞는 메뉴를 사용하여 임시 중단점을 설정할 수도 있습니다.

  1. 코드 줄 옆의 맨 왼쪽 여백을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 임시 중단점 삽입을 선택합니다.

    임시 중단점 컨텍스트

또는 단축키 F9 + Shift + Alt, T을 사용하여 원하는 줄에 임시 중단점을 설정합니다.