다음을 통해 공유


디버깅을 위한 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

참고 항목