생성된 C++ 코드 디버깅
Understand how to use Visual Studio to debug your generated C++ code.
읽는 시간 2분최근 업데이트: 한 달 전
Visual Studio를 사용하여 UWP(유니버설 Windows 플랫폼) 애플리케이션용으로 생성된 C++ 코드를 디버깅할 수 있습니다.
생성된 C++ 코드의 클래스와 메서드 명명법 이해
IL2CPP 클래스
IL2CPP 클래스는 포맷을 따릅니다.
<ClassName>_t#number- 은 클래스 이름입니다.
<ClassName> - 선택 사항인 는 고유 유형 번호입니다.
#number
예시 IL2CPP 클래스:
- - String 클래스
String_t - - Object 클래스
Object_t - - Type 클래스
Type_t - - StringBuilder 클래스
StringBuilder_t26
IL2CPP 메서드
IL2CPP 메서드는 포맷을 따릅니다.
<ClassName>_<MethodName>_m#number- 은 메서드의 선언 유형 클래스명입니다.
<ClassName> - 은 메서드명입니다.
<MethodName> - 는 고유 메서드 번호입니다.
#number
예시 IL2CPP 메서드:
- - ConfigurationSection 클래스의 DeserializationSection 메서드
ConfigurationSection_DoDeserializeSection_m1275 - - String 클래스의 Format 메서드
String_Format_m4102 - - Mathf 클래스의 Sqrt 메서드
Mathf_Sqrt_m289
IL2CPP 정적 필드 구조
정적 필드 구조는 포맷을 따르며, 여기서 구조 이름의 첫 번째 부분은 선언 유형과 동일합니다.
<ClassName>_t#number_StaticFields예시 정적 필드 구조:
StringBuilder_t26_StaticFieldsThing_t24_StaticFields
C++ 코멘트
각 클래스나 메서드 정의 앞에 C++은 전체 클래스명 또는 메서드명을 명시하는 코멘트를 생성합니다.
예시 C++ 코멘트:
// System.Text.StringBuilder struct StringBuilder_t26 : public Object_t { // System.Int32 System.Text.StringBuilder::_length int32_t length_1; // System.Int32 System.Text.StringBuilder::_maxCapacity int32_t maxCapacity_2; };
변수 값 관측
Visual Studio 디버거로 변수 값을 관찰하여 생성된 C++ 코드를 디버깅할 수 있습니다.
변수를 관찰할 수 있도록 디버거가 중지하게 하려는 중단점을 Visual Studio에서 설정할 수 있습니다. Visual Studio를 사용하면 변수 위로 마우스를 올리거나 Watch 창을 사용하여 변수 값을 관찰할 수 있습니다.
정적 필드 관측
IL2CPP에서 Unity는 정적 필드를 Il2CppClass 인스턴스에 저장합니다. 정적 필드의 값을 관찰하려면 다음을 수행해야 합니다.
-
해당 유형의 Il2CppClass 구조에 대한 포인터를 코드에서 찾습니다.참고: 이러한 포인터는 이를 사용하는 메서드의 범위에 있지만, 한 번 관찰한 후에는 애플리케이션 실행 동안 동일한 메모리 주소로 유지됩니다.
-
해당 포인터에서필드의 값을 가져옵니다. 이는 특정 유형의 정적 필드가 포함된 메모리 블록에 대한 포인터입니다.
static_fields -
값을 해당 정적 필드 구조에 캐스트합니다.
-
Visual Studio 디버거에서 값을 관찰합니다.
예외 분석
IL2CPP는 네이티브 C++ 예외를 사용하여 .NET 예외를 구현합니다.
코드에서 예외를 분석하려면 다음을 수행합니다.