JavaScript 확장의 네이티브 디버거 개체 - 형식 개체
네이티브 디버거 개체는 디버거 환경의 다양한 구문을 나타냅니다. JavaScript 확장은 기본 언어의 형식 시스템에 직접 액세스할 수 있습니다. 이 액세스는 형식 개체의 개념을 통해 표현됩니다. 이 항목에서는 형식 개체와 연결된 속성에 대해 설명합니다.
네이티브 디버거 개체는 디버거 환경의 다양한 구문과 동작을 나타냅니다. 개체를 JavaScript 확장으로 전달(또는 획득)하여 디버거의 상태를 조작할 수 있습니다.
디버거 개체 JavaScript 확장에 대한 자세한 내용은 JavaScript 확장의 네이티브 디버거 개체를 참조하세요.
JavaScript 작업에 대한 일반적인 내용은 JavaScript 디버거 스크립팅을 참조하세요.
형식 개체
형식 개체는 여러 가지 방법으로 가져올 수 있습니다.
- 개체: 스크립트에 JavaScript 내에 네이티브 개체가 있는 경우 해당 개체에서 targetType 속성에 액세스하여 네이티브 개체의 정적 형식을 나타내는 형식 개체 를 가져올 수 있습니다.
- 호스트: host.getModuleType API를 호출하여 특정 모듈에 정의된 모든 형식의 형식 개체 를 반환할 수 있습니다.
형식 개체를 가져오면 다음과 같은 속성이 있습니다.
이름 | 서명 | 설명 |
name | 속성 | 형식의 이름을 반환합니다. |
크기 | 속성 | 형식의 크기를 64비트 값으로 반환합니다. |
typeKind | 속성 | 형식의 종류를 문자열로 반환합니다. "udt", "pointer", "memberPointer", "array", "function", "typedef", "enum" 또는 "intrinsic" 값 중 하나일 수 있습니다. |
baseType | 속성 | 이 형식의 기반이 되는 형식에 대한 형식 개체를 반환합니다. 이는 C++ 상속을 나타내지 않습니다. 포인터 형식의 경우 가리키는 형식입니다. 배열 형식의 경우 배열에 포함된 형식입니다. |
fields | 속성 | 명명된 속성으로 액세스할 수 있는 형식의 명명된 필드가 모두 있는 개체를 반환합니다. 각 속성의 값은 아래에 설명된 대로 필드 개체 입니다. |
baseClasses | 속성 | 형식의 모든 직접 기본 클래스의 배열을 반환합니다. 배열의 각 개체는 아래에 설명된 대로 기본 클래스 개체 입니다. |
functionReturnType | 속성 | 함수 형식의 경우 함수의 반환 형식을 나타내는 형식 개체를 반환합니다. |
functionParameterTypes | 속성 | 함수 형식의 경우 함수의 매개 변수 형식을 나타내는 형식 개체의 배열을 반환합니다. |
functionCallingConvention | 속성 | 함수 형식의 경우 함수의 호출 규칙을 문자열로 반환합니다. "unknown", "__cdecl", "fastcall", "stdcall" 또는 "thiscall" 값 중 하나일 수 있습니다. |
pointerKind | 속성 | 포인터 형식의 경우 포인터 종류를 문자열로 반환합니다. "standard", "reference", "rValueReference" 또는 "cxHat" 값 중 하나일 수 있습니다. |
memberType | 속성 | 멤버 포인터인 포인터 형식의 경우 멤버 클래스를 나타내는 형식 개체를 반환합니다. |
isGeneric | 속성 | 형식이 제네릭인지 여부를 반환합니다. 템플릿 형식에 대해 true가 반환됩니다. |
genericArguments | 속성 | 제네릭 형식의 경우 제네릭 인수의 배열을 반환합니다. 이러한 인수는 형식 인수이거나 상수 값일 수 있습니다. |
isBitField | 속성 | 형식의 스토리지가 비트필드인지 여부를 반환합니다. |
bitFieldPositions | 속성 | 비트 필드 스토리지를 나타내는 형식의 경우 비트 필드의 위치를 나타내는 비트 필드 설명 형식을 반환합니다. |
이러한 모든 항목은 2단계 초기화 중에 존재합니다.
필드 개체
형식 내의 각 필드는 다음과 같이 속성을 갖는 필드 개체에 의해 설명됩니다.
이름 | 서명 | 설명 |
name | 속성 | 필드의 이름을 반환합니다. |
형식 | 속성 | 필드의 정적 형식을 나타내는 형식 개체를 반환합니다. |
locationKind | 속성 | 필드의 위치 종류(스토리지)를 문자열로 반환합니다. "member", "static", "constant" 또는 "none" 값 중 하나일 수 있습니다. |
offset | 속성 | 오프셋(예: "member")을 나타내는 위치 종류가 있는 필드의 경우 포함하는 형식 내 필드의 오프셋을 64비트 값으로 반환합니다. |
위치 | 속성 | 위치를 나타내는 위치 종류(예: "static")가 있는 필드의 경우 필드의 위치를 위치 개체로 반환합니다. |
value | 속성 | 값(예: "상수")을 나타내는 위치 종류가 있는 필드의 경우 필드 값을 반환합니다. |
이러한 모든 항목은 2단계 초기화 중에 존재합니다.
기본 클래스 개체
형식 내의 각 기본 클래스는 다음과 같이 속성을 갖는 기본 클래스 개체에 의해 설명됩니다.
이름 | 서명 | 설명 |
name | 속성 | 기본 클래스의 이름을 반환합니다. |
offset | 속성 | 포함하는 형식 내에서 이 기본 클래스의 오프셋을 반환합니다. |
형식 | 속성 | 기본 클래스의 정적 형식을 나타내는 형식 개체를 반환합니다. |
이러한 모든 항목은 2단계 초기화 중에 존재합니다.
코드 예
코드 예제는 ImageInfo.js 스크립트를 참조하세요. 코드 샘플에 대한 자세한 내용은 JavaScript 디버거 예제 스크립트를 참조하세요.
// fieldType references basic types that should be present in **ANY** symbolic information.
// Just grab the first module as the "reference module" for this purpose. We cannot grab
// "ntdll" generically as we want to avoid a situation in which the debugger opens a module (-z ...)
// from failing.
//
var moduleName = contextInheritorModule.__ComparisonName;
var typeObject = host.getModuleType(moduleName, field.fieldType, contextInheritorModule);
var result = host.createTypedObject(addr, typeObject);