> 백엔드 개발 > C++ > Visual Studio 디버거의 '마법 이름'은 무엇이며 어떻게 작동합니까?

Visual Studio 디버거의 '마법 이름'은 무엇이며 어떻게 작동합니까?

Susan Sarandon
풀어 주다: 2025-01-13 11:39:43
원래의
633명이 탐색했습니다.

What are the Visual Studio Debugger's

Visual Studio 디버거의 수수께끼 같은 명명 규칙 공개

Visual Studio의 디버깅 능력은 표면 너머로 확장되어 컴파일러에서 생성된 "마법의 이름"을 사용하여 다양한 프로그램 엔터티를 관리합니다. 이러한 이름은 종종 사용자 인터페이스에서 숨겨져 있지만 고급 디버깅 기능과 최적화를 가능하게 합니다. 디버거의 내부 작동을 효과적으로 탐색하려면 이러한 명명 패턴을 이해하는 것이 중요합니다.

Microsoft는 전체 구현 세부 사항을 공개적으로 문서화하지 않지만 C# GeneratedNames.cs 소스를 분석하면 이러한 명명 규칙에 대한 귀중한 통찰력을 얻을 수 있습니다. 이러한 규칙은 예고 없이 변경될 수 있습니다.

숨겨진 변수 및 임시 저장:

  • 사용하지 않는 로컬: 디버거는 컴파일러 최적화를 나타내는 명확한 지표인 __Deleted$ 접미사를 사용하여 사용하지 않는 로컬 변수에 태그를 지정합니다.

  • 임시 변수: 임시 변수는 CS$X$Y 명명 체계를 사용합니다.

    • X: 임시의 특성을 나타냅니다(예: 단기는 0, 반환 값은 1, 잠금 문은 2 등). 전체 키는 아래에 제공됩니다.
    • Y: 특정 임시 인스턴스를 식별하는 일련 번호입니다.

컴파일러에서 생성된 특수 이름:

컴파일러는 다음을 포함하여 다양한 내부 구조 및 작업에 대해 고유한 이름을 생성합니다.

  • 반복자 상태(state)
  • 반복자 현재 값(current)
  • 반복자 매개변수 및 호이스팅 변수
  • 반복자 클로저 클래스 인스턴스(locals)
  • 캐시된 익명 메서드 대리자(CachedAnonymousMethodDelegate)
  • 반복자 인스턴스(iterator)
  • 익명 메서드 및 해당 클로저 클래스(DisplayClass)
  • 반복자 클래스
  • 고정 버퍼(FixedBuffer)
  • 익명 유형(AnonymousType, Field, TPar)
  • 자동 속성 지원 필드(BackingField)
  • 반복자 스레드 ID
  • 반복자 finally 블록(Finally)
  • 동적 컨테이너 및 호출 사이트(SiteContainer, Site, SiteDelegate)
  • COM 참조 통화 현지인(ComRefCallLocal)
  • 잠금 획득 추적(LockTaken)
  • 쿼리 표현식 임시(TransparentIdentifier)

마법 이름 공식:

이 마법 이름의 일반적인 패턴은 다음과 같습니다. P<n>C__SI, 여기서:

  • P: 캐시된 대리자 및 표시 클래스 인스턴스에 대한 CS$ 접두사. 그렇지 않으면 비어 있습니다.
  • <n>: 원래 변수 이름(해당되는 경우).
  • C: 항목 유형을 나타내는 단일 문자(1~s).
  • S: 선택적 설명 접미사입니다.
  • I: 선택적 고유 식별자입니다.

임시 변수 종류 키:

  • 0: 단기 임시
  • 1: 임시 반환 값
  • 2: 잠금 문 임시
  • 3: 명령문 임시 사용
  • 4: 내구성 있는 임시
  • 5: Foreach 열거자 결과
  • 6: Foreach 배열 스토리지
  • 7: Foreach 배열 인덱스 저장소
  • 8-264: 다차원 배열 인덱스 저장소
  • 264: 문자열 고정 문 임시

이 세부 분석을 통해 Visual Studio에서 디버깅하는 동안 자주 발생하는 난해한 이름을 더 명확하게 이해할 수 있습니다. 이 정보는 관찰을 바탕으로 한 것이며 향후 컴파일러 업데이트에 따라 변경될 수 있다는 점을 기억하세요.

위 내용은 Visual Studio 디버거의 '마법 이름'은 무엇이며 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿