다음을 통해 공유


Visual Studio 디버거에서 중단점 문제 해결

적용 대상: Visual Studio

중단점 경고

디버깅할 때 중단점에 는 두 가지 가능한 시각적 상태가 있습니다.

  • 디버거가 대상 프로세스에서 중단점을 성공적으로 설정하면 빨간색 원이 표시됩니다.
  • 중단점을 설정하려고 할 때 중단점이 비활성화되거나 경고가 발생하는 경우 빈 원(테마에 따라 진한 회색 또는 흰색으로 채워짐)입니다.

차이점을 확인하려면 중단점을 마우스로 가리켜서 경고가 나타나는지 확인합니다. 다음 두 섹션에서는 중요한 경고와 이를 해결하는 방법을 설명합니다.

“이 문서의 기호가 로드되지 않았습니다.”

디버깅할 때 Windows>모듈 디버그>로 이동하고 모듈이 로드되었는지 확인합니다.

  • 모듈이 로드된 경우 기호 상태 열을 확인하여 기호가 로드되었는지 여부를 살펴봅니다.
    • 기호가 로드되지 않으면 기호 상태를 확인하여 문제를 진단합니다.

      모듈 창에서 기호가 로드되지 않은 모듈을 마우스 오른쪽 단추로 클릭하고 기호 로드 정보를 선택합니다.

      모듈 창의 기호 로드 정보 스크린샷

      기호를 로드하는 방법에 대한 자세한 내용은 기호 파일(.pdb) 및 원본 파일 지정을 참조하세요.

    • 기호가 로드되면 PDB에 원본 파일에 대한 정보가 포함되지 않습니다. 몇 가지 가능한 원인은 다음과 같습니다.

      • 원본 파일이 최근에 추가된 경우 최신 버전의 모듈이 로드되는지 확인합니다.
      • /PDBSTRIPPED 링커 옵션을 사용하여 제거된 PDB를 만들 수 있습니다. 제거된 PDB는 원본 파일 정보를 포함하지 않습니다. 제거된 PDB가 아니라 전체 PDB로 작업하고 있는지 확인하세요.
      • PDB 파일이 부분적으로 손상되었습니다. 파일을 삭제하고 모듈의 빌드 정리를 실행하여 문제를 해결해 보세요.
  • 모듈이 로드되지 않은 경우 다음을 확인하여 원인을 찾습니다.
    • 올바른 프로세스를 디버그하고 있는지 확인합니다.
    • 올바른 코드를 디버그하고 있는지 확인합니다. 프로세스 창(디버그>>프로세스)에서 디버거가 디버그하도록 구성된 코드의 유형을 찾을 수 있습니다. 예를 들어 C# 코드를 디버그하려는 경우 .NET의 해당 유형과 버전에 맞게 디버거가 구성되어 있는지 확인하세요(예: 관리됨(v4*), 관리됨(v2*/v3*), 관리됨(CoreCLR)).

"… 현재 소스 코드가 ...에 빌드된 버전과 다릅니다.”

원본 파일이 변경되었고 소스가 디버그 중인 코드와 더 이상 일치하지 않는 경우 디버거는 기본적으로 코드에 중단점을 설정하지 않습니다. 일반적으로 이 문제는 원본 파일이 변경되었지만 소스 코드는 다시 빌드되지 않은 경우에 발생합니다. 이 문제를 해결하려면 프로젝트를 다시 빌드하세요. 빌드 시스템에서 프로젝트가 최신 상태가 아니지만 최신 상태로 표시된다면, 프로젝트 시스템을 강제로 다시 빌드할 수 있습니다. 원본 파일을 다시 저장하거나 빌드하기 전에 빌드 출력을 지워 프로젝트를 다시 빌드합니다.

드문 경우지만 소스 코드를 일치시키지 않고 디버그할 수도 있습니다. 소스 코드를 일치시키지 않고 디버그하면 디버깅 경험이 혼란스러울 수 있으므로 진행 방법을 확인해야 합니다.

다음 옵션 중 하나를 따라 이러한 안전 검사를 사용하지 않도록 설정합니다.

  • 단일 중단점을 수정하려면 편집기에서 중단점 아이콘을 마우스로 가리키고 설정(기어) 아이콘을 선택합니다. 편집기에 피크(Peek) 창이 추가되고 피크(Peek) 창 위쪽에는 중단점의 위치를 나타내는 하이퍼링크가 있습니다. 중단점 위치 수정을 허용하는 하이퍼링크를 선택하고 소스 코드가 원래 코드와 일치하지 않아도 됨을 선택합니다.
  • 모든 중단점에 대해 이 설정을 수정하려면 디버그>옵션 및 설정으로 이동합니다. 디버깅/일반 페이지에서 소스 파일이 원래 버전과 정확하게 일치해야 함 옵션을 선택 취소합니다. 디버깅이 완료되면 이 옵션을 다시 사용하도록 설정해야 합니다.

중단점이 성공적으로 설정되었지만(경고 없음) 적중되지는 않음

이 섹션에서는 디버거가 경고를 표시하지 않을 때, 다시 말해서 중단점이 실제로 디버그하는 동안 중단점이 단색 빨간 원으로 표시되지만 중단점이 적중되지는 않는 문제를 해결할 수 있는 정보를 제공합니다.

다음 몇 가지 사항을 확인해 보세요.

  1. 두 개 이상의 프로세스나 두 대 이상의 컴퓨터에서 코드가 실행되는 경우 올바른 프로세스나 컴퓨터를 디버그하고 있는지 확인합니다.
  2. 코드가 실행 중인지 확인합니다. 코드가 실행 중인지 테스트하려면 중단점을 설정하려는 코드 줄에 System.Diagnostics.Debugger.Break(C#/VB) 또는 __debugbreak(C++)에 대한 호출을 추가한 후 프로젝트를 다시 빌드합니다.
  3. 최적화된 코드를 디버그하는 경우 중단점이 설정된 함수가 다른 함수에 인라인되지 않도록 해야 합니다. 이전 확인에서 설명한 Debugger.Break 테스트도 이 문제를 테스트하는 데 사용할 수 있습니다.
  4. 프로세스 시나리오에 연결하려면 올바른 형식의 코드(예: 스크립트 코드와 .NET Framework 및 .NET 5 이상)를 디버깅하고 있는지 확인합니다. 조사하려면 프로세스에 연결 대화 상자에서 연결 옵션을 선택하고 필요한 경우 선택을 선택하여 코드 형식을 변경합니다.

중단점을 삭제했지만 다시 디버그하기 시작하면 계속 중단점이 적중되는 경우

디버그하는 동안 중단점을 삭제한 경우 다음에 디버깅을 시작할 때 중단점이 다시 적중될 수도 있습니다. 이 중단점이 적중되는 것을 중지하려면 중단점 창에서 모든 중단점 인스턴스가 제거되었는지 확인합니다.