디버깅을 위한 SDK 도우미
이러한 함수 및 선언은 C++에서 디버그 엔진, 식 계산기 및 기호 공급자를 구현하기 위한 전역 도우미 함수입니다.
참고 항목
현재 이러한 함수 및 선언의 관리되는 버전은 없습니다.
Visual Studio에서 디버그 엔진, 식 계산기 및 기호 공급자를 사용하려면 각각 등록해야 합니다. 이 작업은 레지스트리 하위 키 및 항목을 설정하여 수행하는데, 이를 "메트릭 설정"이라고도 합니다. 다음 전역 함수는 이러한 메트릭을 용이하게 업데이트하도록 설계되었습니다. 이러한 함수에 의해 업데이트되는 각 레지스트리 하위 키의 레이아웃을 확인하려면 레지스트리 위치 섹션을 참조하세요.
일반 메트릭 함수
디버그 엔진에서 사용되는 일반 함수입니다. 식 계산기 및 기호 공급자에 대한 특수 함수는 나중에 자세히 설명합니다.
GetMetric 메서드
레지스트리에서 메트릭 값을 검색합니다.
HRESULT GetMetric(
LPCWSTR pszMachine,
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
DWORD * pdwValue,
LPCWSTR pszAltRoot
);
매개 변수 | 설명 |
---|---|
pszMachine | [in] 레지스터가 기록될 원격 컴퓨터의 이름입니다(NULL 은 로컬 컴퓨터를 의미). |
pszType | [in] 메트릭 형식 중 하나입니다. |
guidSection | [in] 특정 엔진, 평가기, 예외 등의 GUID입니다. 특정 요소에 대한 메트릭 형식 아래의 하위 섹션을 지정합니다. |
pszMetric | [in] 가져올 메트릭입니다. 특정 값 이름에 해당합니다. |
pdwValue | [in] 메트릭에 있는 값의 스토리지 위치입니다. DWORD(이 예제의 경우), BSTR, GUID 또는 GUID 배열을 반환할 수 있는 여러 버전의 GetMetric이 있습니다. |
pszAltRoot | [in] 사용할 대체 레지스트리 루트입니다. 기본값을 사용하려면 NULL 로 설정합니다. |
SetMetric 메서드
레지스트리에서 지정된 메트릭 값을 설정합니다.
HRESULT SetMetric(
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
const DWORD dwValue,
bool fUserSpecific,
LPCWSTR pszAltRoot
);
매개 변수 | 설명 |
---|---|
pszType | [in] 메트릭 형식 중 하나입니다. |
guidSection | [in] 특정 엔진, 평가기, 예외 등의 GUID입니다. 특정 요소에 대한 메트릭 형식 아래의 하위 섹션을 지정합니다. |
pszMetric | [in] 가져올 메트릭입니다. 특정 값 이름에 해당합니다. |
dwValue | [in] 메트릭에 있는 값의 스토리지 위치입니다. DWORD(이 예제의 경우), BSTR, GUID 또는 GUID 배열을 저장할 수 있는 여러 버전의 SetMetric이 있습니다. |
fUserSpecific | [in] 메트릭이 사용자별이고 로컬 컴퓨터 하이브 대신 사용자의 하이브에 기록되어야 하는 경우 TRUE입니다. |
pszAltRoot | [in] 사용할 대체 레지스트리 루트입니다. 기본값을 사용하려면 NULL 로 설정합니다. |
RemoveMetric 메서드
레지스트리에서 지정된 메트릭을 제거합니다.
HRESULT RemoveMetric(
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
LPCWSTR pszAltRoot
);
매개 변수 | 설명 |
---|---|
pszType | [in] 메트릭 형식 중 하나입니다. |
guidSection | [in] 특정 엔진, 평가기, 예외 등의 GUID입니다. 특정 요소에 대한 메트릭 형식 아래의 하위 섹션을 지정합니다. |
pszMetric | [in] 제거할 메트릭입니다. 특정 값 이름에 해당합니다. |
pszAltRoot | [in] 사용할 대체 레지스트리 루트입니다. 기본값을 사용하려면 NULL 로 설정합니다. |
EnumMetricSections 메서드
레지스트리의 다양한 메트릭 섹션을 열거합니다.
HRESULT EnumMetricSections(
LPCWSTR pszMachine,
LPCWSTR pszType,
GUID * rgguidSections,
DWORD * pdwSize,
LPCWSTR pszAltRoot
);
매개 변수 | 설명 |
---|---|
pszMachine | [in] 레지스터가 기록될 원격 컴퓨터의 이름입니다(NULL 은 로컬 컴퓨터를 의미). |
pszType | [in] 메트릭 형식 중 하나입니다. |
rgguidSections | [in, out] 채울 GUID의 미리 할당된 배열입니다. |
pdwSize | [in] rgguidSections 배열에 저장할 수 있는 GUID의 최대 수입니다. |
pszAltRoot | [in] 사용할 대체 레지스트리 루트입니다. 기본값을 사용하려면 NULL 로 설정합니다. |
식 계산기 함수
함수 | 설명 |
---|---|
GetEEMetric | 레지스트리에서 메트릭 값을 검색합니다. |
SetEEMetric | 레지스트리에서 지정된 메트릭 값을 설정합니다. |
RemoveEEMetric | 레지스트리에서 지정된 메트릭을 제거합니다. |
GetEEMetricFile | 지정된 메트릭에서 파일 이름을 가져오고 로드하여 파일 내용을 문자열로 반환합니다. |
예외 함수
함수 | 설명 |
---|---|
GetExceptionMetric | 레지스트리에서 메트릭 값을 검색합니다. |
SetExceptionMetric | 레지스트리에서 지정된 메트릭 값을 설정합니다. |
RemoveExceptionMetric | 레지스트리에서 지정된 메트릭을 제거합니다. |
RemoveAllExceptionMetrics | 레지스트리에서 모든 예외 메트릭을 제거합니다. |
기호 공급자 함수
함수 | 설명 |
---|---|
GetSPMetric | 레지스트리에서 메트릭 값을 검색합니다. |
SetSPMetric | 레지스트리에서 지정된 메트릭 값을 설정합니다. |
RemoveSPMetric | 레지스트리에서 지정된 메트릭을 제거합니다. |
열거형 함수
함수 | 설명 |
---|---|
EnumMetricSections | 지정된 메트릭 형식에 대한 모든 메트릭을 열거합니다. |
EnumDebugEngine | 등록된 디버그 엔진을 열거합니다. |
EnumEEs | 등록된 식 계산기를 열거합니다. |
EnumExceptionMetrics | 모든 예외 메트릭을 열거합니다. |
메트릭 정의
이러한 정의는 미리 정의된 메트릭 이름에 사용할 수 있습니다. 이름은 다양한 레지스트리 키 및 값 이름에 해당하며 모두 와이드 문자 문자열로 정의됩니다(예 extern LPCWSTR metrictypeEngine
).
미리 정의된 메트릭 형식 | 설명 |
---|---|
metrictypeEngine | 모든 디버그 엔진 메트릭의 기본 키입니다. |
metrictypePortSupplier | 모든 포트 공급자 메트릭의 기본 키입니다. |
metrictypeException | 모든 예외 메트릭의 기본 키입니다. |
metricttypeEEExtension | 모든 식 계산기 확장의 기본 키입니다. |
디버그 엔진 속성 | 설명 |
---|---|
metricAddressBP | 주소 중단점에 대한 지원을 나타내려면 0이 아닌 값으로 설정합니다. |
metricAlwaysLoadLocal | 디버그 엔진을 항상 로컬로 로드하려면 0이 아닌 값으로 설정합니다. |
metricLoadInDebuggeeSession | 사용되지 않음 |
metricLoadedByDebuggee | 디버그 엔진이 항상 디버그 중인 프로그램과 함께 또는 디버그 중인 프로그램에 의해 로드됨을 나타내려면 0이 아닌 값으로 설정합니다. |
metricAttach | 기존 프로그램에 대한 연결 지원을 나타내려면 0이 아닌 값으로 설정합니다. |
metricCallStackBP | 호출 스택 중단점에 대한 지원을 나타내려면 0이 아닌 값으로 설정합니다. |
metricConditionalBP | 조건부 중단점 설정에 대한 지원을 나타내려면 0이 아닌 값으로 설정합니다. |
metricDataBP | 데이터 변경 내용에 대한 중단점 설정 지원을 나타내려면 0이 아닌 값으로 설정합니다. |
metricDisassembly | 디스어셈블리 목록의 프로덕션에 대한 지원을 나타내려면 0이 아닌 값으로 설정합니다. |
metricDumpWriting | 덤프 쓰기(출력 디바이스에 메모리 덤프)에 대한 지원을 나타내려면 0이 아닌 값으로 설정합니다. |
metricENC | 편집하며 계속하기에 대한 지원을 나타내려면 0이 아닌 값으로 설정합니다. 참고: 사용자 지정 디버그 엔진은 이 속성을 설정하지 않거나 항상 0으로 설정해야 합니다. |
metricExceptions | 예외에 대한 지원을 나타내려면 0이 아닌 값으로 설정합니다. |
metricFunctionBP | 명명된 중단점(특정 함수 이름을 호출할 때 중단되는 중단점)에 대한 지원을 나타내려면 0이 아닌 값으로 설정합니다. |
metricHitCountBP | "적중 지점" 중단점(특정 횟수에 도달한 후에만 트리거되는 중단점) 설정에 대한 지원을 나타내려면 0이 아닌 값으로 설정합니다. |
metricJITDebug | Just-In-Time 디버깅(실행 중인 프로세스에서 예외가 발생할 때 디버거가 시작됨)에 대한 지원을 나타내려면 0이 아닌 값으로 설정합니다. |
metricMemory | 사용되지 않음 |
metricPortSupplier | 구현된 포트 공급자가 있는 경우 해당 CLSID로 설정합니다. |
metricRegisters | 사용되지 않음 |
metricSetNextStatement | 다음 문 설정(중간 문 실행 건너뛰기)에 대한 지원을 나타내려면 0이 아닌 값으로 설정합니다. |
metricSuspendThread | 스레드 실행 일시 중단에 대한 지원을 나타내려면 0이 아닌 값으로 설정합니다. |
metricWarnIfNoSymbols | 기호가 없는 경우 사용자가 알림을 받아야 함을 나타내려면 0이 아닌 값으로 설정합니다. |
metricProgramProvider | 프로그램 공급자의 CLSID로 설정합니다. |
metricAlwaysLoadProgramProviderLocal | 프로그램 공급자가 항상 로컬로 로드되어야 함을 나타내려면 0이 아닌 값으로 설정합니다. |
metricEngineCanWatchProcess | 디버그 엔진이 프로그램 공급자 대신 프로세스 이벤트를 감시함을 나타내려면 0이 아닌 값으로 설정합니다. |
metricRemoteDebugging | 원격 디버깅에 대한 지원을 나타내려면 0이 아닌 값으로 설정합니다. |
metricEncUseNativeBuilder | 편집하며 계속하기 관리자가 디버그 엔진의 encbuild.dll 사용하여 편집하며 계속하기를 위해 빌드해야 함을 나타내려면 0이 아닌 값으로 설정합니다. 참고: 사용자 지정 디버그 엔진은 이 속성을 설정하지 않거나 항상 0으로 설정해야 합니다. |
metricLoadUnderWOW64 | 64비트 프로세스를 디버그할 때 디버그 엔진을 WOW 디버기 프로세스에서 로드해야 함을 나타내려면 0이 아닌 값으로 설정합니다. 그렇지 않으면 디버그 엔진이 Visual Studio 프로세스(WOW64)에서 로드됩니다. |
metricLoadProgramProviderUnderWOW64 | WOW 64비트 프로세스를 디버그할 때 프로그램 공급자를 디버기 프로세스에서 로드해야 함을 나타내려면 0이 아닌 값으로 설정합니다. 그렇지 않으면 Visual Studio 프로세스에서 로드됩니다. |
metricStopOnExceptionCrossingManagedBoundary | 처리되지 않은 예외가 관리/관리되지 않는 코드 경계에서 throw되는 경우 프로세스가 중지되어야 함을 나타내려면 0이 아닌 값으로 설정합니다. |
metricAutoSelectPriority | 디버그 엔진의 자동 선택 우선 순위로 설정합니다(값이 클수록 우선 순위가 높음). |
metricAutoSelectIncompatibleList | 자동 선택에서 무시할 디버그 엔진의 GUID를 지정하는 항목이 포함된 레지스트리 키입니다. 이러한 항목은 GUID가 문자열로 표현된 숫자(0, 1, 2 등)입니다. |
metricIncompatibleList | 이 디버그 엔진과 호환되지 않는 디버그 엔진의 GUID를 지정하는 항목이 포함된 레지스트리 키입니다. |
metricDisableJITOptimization | 디버깅 중에 Just-In-Time 최적화(관리 코드의 경우)를 사용하지 않음을 나타내려면 0이 아닌 값으로 설정합니다. |
식 계산기 속성 | 설명 |
---|---|
metricEngine | 지정된 식 계산기를 지원하는 디버그 엔진의 수가 보관됩니다. |
metricPreloadModules | 프로그램에 대해 식 계산기가 시작될 때 모듈을 미리 로드해야 함을 나타내려면 0이 아닌 값으로 설정합니다. |
metricThisObjectName | "이" 개체 이름으로 설정합니다. |
식 계산기 확장 속성 | 설명 |
---|---|
metricExtensionDll | 이 확장을 지원하는 dll의 이름입니다. |
metricExtensionRegistersSupported | 지원되는 레지스터의 목록입니다. |
metricExtensionRegistersEntryPoint | 레지스터에 액세스하기 위한 진입점입니다. |
metricExtensionTypesSupported | 지원되는 형식의 목록입니다. |
metricExtensionTypesEntryPoint | 형식에 액세스하기 위한 진입점입니다. |
포트 공급자 속성 | 설명 |
---|---|
metricPortPickerCLSID | 포트 선택기(사용자가 포트를 선택하고 디버깅에 사용할 포트를 추가하는 데 사용할 수 있는 대화 상자)의 CLSID입니다. |
metricDisallowUserEnteredPorts | 0이 아닌 값은 사용자가 입력한 포트를 포트 공급자에 추가할 수 없음을 나타냅니다(포트 선택 대화 상자가 기본적으로 읽기 전용으로 설정됨). |
metricPidBase | 프로세스 ID를 할당할 때 포트 공급자가 사용하는 기본 프로세스 ID입니다. |
미리 정의된 SP 저장소 유형 | 설명 |
---|---|
storetypeFile | 기호가 별도의 파일에 저장됩니다. |
storetypeMetadata | 기호가 어셈블리에 메타데이터로 저장됩니다. |
기타 속성 | 설명 |
---|---|
metricShowNonUserCode | 비사용자 코드를 표시하려면 0이 아닌 코드로 설정합니다. |
metricJustMyCodeStepping | 한 단계 실행이 사용자 코드에서만 발생할 수 있음을 나타내려면 0이 아닌 값으로 설정합니다. |
metricCLSID | 특정 메트릭 형식의 개체의 CLSID입니다. |
metricName | 특정 메트릭 형식의 개체의 식별 이름입니다. |
metricLanguage | 언어 이름입니다. |
레지스트리 위치
메트릭을 레지스트리에서 읽고 씁니다(특히 VisualStudio
).
참고 항목
대부분의 경우 메트릭은 HKEY_LOCAL_MACHINE 키에 기록됩니다. 그러나 HKEY_CURRENT_USER 키가 대상인 경우도 있습니다. Dbgmetric.lib는 두 키를 모두 처리합니다. 메트릭을 가져올 때 먼저 HKEY_CURRENT_USER를 검색한 다음 HKEY_LOCAL_MACHINE을 검색합니다. 이 속성이 메트릭을 설정할 때 매개 변수가 사용할 최상위 키를 지정합니다.
[registry key]\
Software
\
Microsoft
\
VisualStudio
\
[version root]\
[metric root]\
[metric type]\
[metric] = [metric value]
[metric] = [metric value]
[metric] = [metric value]
자리 표시자 | 설명 |
---|---|
[registry key] | HKEY_CURRENT_USER 또는 HKEY_LOCAL_MACHINE . |
[version root] | Visual Studio의 버전입니다(예: 7.0 , 7.1 또는 8.0 ). 그러나 devenv.exe에 대한 /rootuffix 스위치를 사용하여 이 루트를 수정할 수도 있습니다. VSIP의 경우 이 한정자는 일반적으로 Exp이므로 버전 루트는 8.0Exp입니다. |
[metric root] | dbgmetric.lib의 디버그 버전이 사용되는지 여부에 따라 AD7Metrics 또는 AD7Metrics(Debug) 입니다. 참고: dbgmetric.lib를 사용하는지 여부에 관계없이 레지스트리에 반영되어야 하는 디버그 버전과 릴리스 버전 간에 차이가 있는 경우 이 명명 규칙을 준수해야 합니다. |
[metric type] | 기록할 메트릭의 형식입니다. Engine , ExpressionEvaluator , SymbolProvider 등. 이들은 모두 dbgmetric.h에서와 같이 metricTypeXXXX 로 정의됩니다(여기서 XXXX 는 특정 형식 이름). |
[metric] | 메트릭을 설정하기 위해 값을 할당할 항목의 이름입니다. 메트릭의 실제 구성은 메트릭 형식에 따라 달라집니다. |
[metric value] | 메트릭에 할당된 값입니다. 값 형식(문자열, 숫자 등)은 메트릭에 따라 달라집니다. |
참고 항목
모든 GUID는 {GUID}
형식으로 저장됩니다. 예: {123D150B-FA18-461C-B218-45B3E4589F9B}
.
디버그 엔진
다음은 레지스트리에서 디버그 엔진 메트릭의 구성입니다. Engine
은 디버그 엔진의 메트릭 형식 이름이며 위의 레지스트리 하위 트리의 [metric type]에 해당합니다.
Engine
\
[engine guid]\
CLSID
= [class guid]
[metric] = [metric value]
[metric] = [metric value]
[metric] = [metric value]
PortSupplier
\
0
= [port supplier guid]
1
= [port supplier guid]
자리 표시자 | 설명 |
---|---|
[engine guid] | 디버그 엔진의 GUID입니다. |
[class guid] | 이 디버그 엔진을 구현하는 클래스의 GUID입니다. |
[port supplier guid] | 포트 공급자(있는 경우)의 GUID입니다. 많은 디버그 엔진은 기본 포트 공급자를 사용하므로 자체 공급업체를 지정하지 않습니다. 이 경우 하위 키 PortSupplier 가 없습니다. |
포트 공급자
다음은 레지스트리에서 포트 공급자 메트릭의 구성입니다. PortSupplier
는 포트 공급자의 메트릭 형식 이름이며 [metric type]에 해당합니다.
PortSupplier
\
[port supplier guid]\
CLSID
= [class guid]
[metric] = [metric value]
[metric] = [metric value]
자리 표시자 | 설명 |
---|---|
[port supplier guid] | 포트 공급자의 GUID입니다. |
[class guid] | 이 포트 공급자를 구현하는 클래스의 GUID입니다. |
기호 공급자
다음은 레지스트리에서 기호 공급자 메트릭의 구성입니다. SymbolProvider
는 기호 공급자의 메트릭 형식 이름이며 [metric type]에 해당합니다.
SymbolProvider
\
[symbol provider guid]\
file
\
CLSID
= [class guid]
[metric] = [metric value]
[metric] = [metric value]
metadata
\
CLSID
= [class guid]
[metric] = [metric value]
[metric] = [metric value]
자리 표시자 | 설명 |
---|---|
[symbol provider guid] | 기호 공급자의 GUID입니다. |
[class guid] | 이 기호 공급자를 구현하는 클래스의 GUID입니다. |
식 계산기
다음은 레지스트리에서 식 계산기 메트릭의 구성입니다. ExpressionEvaluator
는 식 계산기의 메트릭 형식 이름이며 [metric type]에 해당합니다.
참고 항목
식 계산기에 대한 모든 메트릭 변경 내용이 적절한 식 계산기 메트릭 함수를 통과한다고 가정하므로 ExpressionEvaluator
의 메트릭 형식은 dbgmetric.h에서 정의되지 않습니다(ExpressionEvaluator
하위 키의 레이아웃은 다소 복잡하므로 dbgmetric.lib 내에서는 세부 정보가 숨겨짐).
ExpressionEvaluator
\
[language guid]\
[vendor guid]\
CLSID
= [class guid]
[metric] = [metric value]
[metric] = [metric value]
Engine
\
0
= [debug engine guid]
1
= [debug engine guid]
자리 표시자 | 설명 |
---|---|
[language guid] | 언어의 GUID입니다. |
[vendor guid] | 공급업체의 GUID입니다. |
[class guid] | 이 식 계산기를 구현하는 클래스의 GUID입니다. |
[debug engine guid] | 이 식 계산기가 작동하는 디버그 엔진의 GUID입니다. |
식 계산기 확장
다음은 레지스트리에서 식 계산기 확장 메트릭의 구성입니다. EEExtensions
는 식 계산기 확장의 메트릭 형식 이름이며 [metric type]에 해당합니다.
EEExtensions
\
[extension guid]\
[metric] = [metric value]
[metric] = [metric value]
자리 표시자 | 설명 |
---|---|
[extension guid] | 식 계산기 확장의 GUID입니다. |
예외
다음은 레지스트리에서 예외 메트릭의 구성입니다. Exception
은 예외의 메트릭 형식 이름이며 [metric type]에 해당합니다.
Exception
\
[debug engine guid]\
[exception types]\
[exception]\
[metric] = [metric value]
[metric] = [metric value]
[exception]\
[metric] = [metric value]
[metric] = [metric value]
자리 표시자 | 설명 |
---|---|
[debug engine guid] | 예외를 지원하는 디버그 엔진의 GUID입니다. |
[exception types] | 처리할 수 있는 예외 클래스를 식별하는 하위 키의 일반적인 제목입니다. 일반적인 이름은 C++ 예외, Win32 예외, 공용 언어 런타임 예외 및 네이티브 런타임 검사입니다. 이러한 이름은 사용자에게 특정 예외 클래스를 식별하는 데도 사용됩니다. |
[exception] | 예외의 이름입니다(예: _com_error 또는 Control-Break). 이러한 이름은 사용자에게 특정 예외를 식별하는 데도 사용됩니다. |
요구 사항
이러한 파일은 Microsoft Visual Studio 2010 SDK 설치 디렉터리(기본적으로 [drive]\Program Files\Microsoft Visual Studio 2010 SDK\)에 있습니다.
헤더: includes\dbgmetric.h
라이브러리: libs\ad2de.lib, libs\dbgmetric.lib