Вспомогательные пакеты 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] Расположение хранилища значения из метрики. Существует несколько вариантов GetMetric, которые могут возвращать DWORD (как в этом примере), BSTR, GUID или массив идентификаторов GUID. |
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] Расположение хранилища значения в метрике. Существует несколько вариантов SetMetric, которые могут хранить DWORD (в этом примере), BSTR, GUID или массив графических идентификаторов. |
fUserSpecific | [in] Значение TRUE, если метрика относится к пользователю, и если она должна быть записана в hive пользователя вместо локального куста компьютера. |
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] Максимальное количество идентификаторов GUID, которые могут храниться в массиве rgguidSections . |
pszAltRoot | [in] Альтернативный корневой каталог реестра для использования. Установите для NULL использования значения по умолчанию. |
Функции вычислителя выражений
Function | Description |
---|---|
GetEEMetric | Извлекает значение метрик из реестра. |
SetEEMetric | Задает указанное значение метрик в реестре. |
RemoveEEMetric | Удаляет указанную метрику из реестра. |
GetEEMetricFile | Возвращает имя файла из указанной метрики и загружает его, возвращая содержимое файла в виде строки. |
Функции исключений
Function | Description |
---|---|
GetExceptionMetric | Извлекает значение метрик из реестра. |
SetExceptionMetric | Задает указанное значение метрик в реестре. |
RemoveExceptionMetric | Удаляет указанную метрику из реестра. |
RemoveAllExceptionMetrics | Удаляет все метрики исключений из реестра. |
Функции поставщика символов
Function | Description |
---|---|
GetSPMetric | Извлекает значение метрик из реестра. |
SetSPMetric | Задает указанное значение метрик в реестре. |
RemoveSPMetric | Удаляет указанную метрику из реестра. |
Функции перечисления
Function | Description |
---|---|
Перечисление Метрик | Перечисляет все метрики для указанного типа метрик. |
EnumDebugEngine | Перечисляет зарегистрированные подсистемы отладки. |
EnumEEs | Перечисляет зарегистрированные вычислители выражений. |
EnumExceptionMetrics | Перечисляет все метрики исключений. |
Определения метрик
Эти определения можно использовать для предопределенных имен метрик. Имена соответствуют различным разделам реестра и именам значений и определяются как широкие символьные строки: например. extern LPCWSTR metrictypeEngine
Предопределенные типы метрик | Описание: базовый ключ для.... |
---|---|
metrictypeEngine | Все метрики подсистемы отладки. |
metrictypePortSupplier | Все метрики поставщика портов. |
metrictypeException | Все метрики исключений. |
metricttypeEEExtension | Все расширения вычислителя выражений. |
Свойства обработчика отладки | Description |
---|---|
metricAddressBP | Задайте значение nonzero, чтобы указать поддержку точек останова адресов. |
metricAlwaysLoadLocal | Установите значение nonzero, чтобы всегда загружать подсистему отладки локально. |
metricLoadInDebuggeeSession | НЕ ИСПОЛЬЗУЕТСЯ |
metricLoadedByDebuggee | Установите значение nonzero, чтобы указать, что подсистема отладки всегда будет загружена или отлаживаемая программой. |
metricAttach | Установите значение nonzero, чтобы указать поддержку вложений к существующим программам. |
metricCallStackBP | Задайте значение nonzero, чтобы указать поддержку точек останова стека вызовов. |
metricConditionalBP | Установите значение nonzero, чтобы указать поддержку параметра условных точек останова. |
metricDataBP | Установите значение nonzero, чтобы указать поддержку параметров точек останова на изменениях данных. |
metricDisassembly | Задайте значение nonzero, чтобы указать поддержку производства списка дизассембли. |
metricDumpWriting | Задайте значение nonzero, чтобы указать поддержку записи дампа (дамп памяти на выходное устройство). |
метрика | Установите значение nonzero, чтобы указать поддержку правки и продолжения. Примечание. Пользовательский модуль отладки никогда не должен задавать это значение или всегда должен иметь значение 0. |
metricExceptions | Задайте значение nonzero, чтобы указать поддержку исключений. |
metricFunctionBP | Установите значение nonzero, чтобы указать поддержку именованных точек останова (точек останова, которые прерываются при вызове определенного имени функции). |
metricHitCountBP | Установите значение nonzero, чтобы указать поддержку параметров точек останова "точка попадания" (точек останова, которые активируются только после нажатия определенного количества раз). |
metricJITDebug | Установите значение nonzero, чтобы указать поддержку JIT-отладки (отладчик запускается при возникновении исключения в запущенном процессе). |
metricMemory | НЕ ИСПОЛЬЗУЕТСЯ |
metricPortSupplier | Задайте для параметра CLSID поставщика портов, если он реализован. |
metricRegisters | НЕ ИСПОЛЬЗУЕТСЯ |
metricSetNextStatement | Установите значение nonzero, чтобы указать поддержку установки следующей инструкции (которая пропускает выполнение промежуточных инструкций). |
metricSuspendThread | Установите значение nonzero, чтобы указать поддержку приостановки выполнения потока. |
metricWarnIfNoSymbols | Установите значение nonzero, чтобы указать, что пользователь должен получать уведомления, если символов нет. |
metricProgramProvider | Задайте для параметра CLSID поставщика программы. |
metricAlwaysLoadProgramProviderLocal | Задайте для этого значение ненулевого значения, чтобы указать, что поставщик программы всегда должен быть загружен локально. |
metricEngineCanWatchProcess | Задайте для этого значение ненулевого значения, чтобы указать, что подсистема отладки будет отслеживать события процесса вместо поставщика программы. |
metricRemoteDebugging | Задайте для этого значение ненулевого значения, чтобы указать поддержку удаленной отладки. |
metricEncUseNativeBuilder | Задайте для этого значение ненулевого значения, чтобы указать, что диспетчер редактирования и продолжения должен использовать encbuild.dll подсистемы отладки для сборки для редактирования и продолжения. Примечание. Пользовательский модуль отладки никогда не должен задавать это значение или всегда должен иметь значение 0. |
metricLoadUnderWOW64 | Задайте для этого значение ненулевого значения, чтобы указать, что подсистема отладки должна быть загружена в процессе отладки в WOW при отладке 64-разрядного процесса; в противном случае подсистема отладки будет загружена в процессе Visual Studio (который выполняется в WOW64). |
metricLoadProgramProviderUnderWOW64 | Задайте для этого значение ненулевого значения, чтобы указать, что поставщик программы должен быть загружен в процесс отладчика при отладке 64-разрядного процесса в WOW; в противном случае она будет загружена в процессе Visual Studio. |
metricStopOnExceptionCrossingManagedBoundary | Задайте для этого значение ненулевого значения, чтобы указать, что процесс должен остановиться, если необработанное исключение возникает через границы управляемого или неуправляемого кода. |
metricAutoSelectPriority | Задайте для этого приоритет для автоматического выбора обработчика отладки (более высокие значения равны более высокому приоритету). |
metricAutoSelectIncompatibleList | Раздел реестра, содержащий записи, указывающие идентификаторы GUID для обработчиков отладки, которые будут игнорироваться при автоматическом выборе. Эти записи являются числом (0, 1, 2 и т. д.) с GUID, выраженным как строка. |
metricIncompatibleList | Раздел реестра, содержащий записи, указывающие идентификаторы GUID для обработчиков отладки, несовместимых с этим модулем отладки. |
metricDisableJITOptimization | Задайте для этого значение ненулевого значения, чтобы указать, что во время отладки необходимо отключить оптимизацию jit (для управляемого кода). |
Свойства вычислителя выражений | Description |
---|---|
metricEngine | Это содержит количество обработчиков отладки, поддерживающих указанный средство оценки выражений. |
metricPreloadModules | Задайте для этого значение ненулевого значения, чтобы указать, что модули должны быть предварительно загружены при запуске вычислителя выражений в программе. |
metricThisObjectName | Задайте для этого имя объекта "this". |
Свойства расширения вычислителя выражений | Description |
---|---|
metricExtensionDll | Имя библиотеки DLL, поддерживающей это расширение. |
metricExtensionRegistersSupported | Список поддерживаемых регистров. |
metricExtensionRegistersEntryPoint | Точка входа для доступа к регистрам. |
metricExtensionTypesSupported | Список поддерживаемых типов. |
metricExtensionTypesEntryPoint | Точка входа для типов доступа. |
Свойства поставщика портов | Description |
---|---|
metricPortPickerCLSID | CLSID средства выбора портов (диалоговое окно пользователь может использовать для выбора портов и добавления портов для отладки). |
metricDisallowUserEnteredPorts | Ненулевое значение, если введенные пользователем порты не могут быть добавлены в поставщик портов (это делает диалоговое окно выбора портов по сути доступно только для чтения). |
metricPidBase | Базовый идентификатор процесса, используемый поставщиком портов при выделении идентификаторов процессов. |
Предопределенные типы хранилища SP | Description |
---|---|
storetypeFile | Символы хранятся в отдельном файле. |
storetypeMetadata | Символы хранятся в виде метаданных в сборке. |
Прочие свойства | Description |
---|---|
metricShowNonUserCode | Задайте для этого значение ненулевого кода, чтобы отобразить неиспользуемый код. |
metricJustMyCodeStepping | Задайте для этого значение ненулевого значения, чтобы указать, что пошаговое выполнение может происходить только в пользовательском коде. |
metricCLSID | CLSID для объекта определенного типа метрик. |
metricName | Понятное имя объекта определенного типа метрик. |
metricLanguage | Имя языка. |
Расположения реестра
Метрики считываются и записываются в реестр, в частности в подразделе VisualStudio
.
Примечание.
В большинстве случаев метрики записываются в ключ HKEY_LOCAL_MACHINE. Однако иногда HKEY_CURRENT_USER будет ключом назначения. Dbgmetric.lib обрабатывает оба ключа. При получении метрики сначала выполняется поиск HKEY_CURRENT_USER, а затем HKEY_LOCAL_MACHINE. При настройке метрики параметр указывает, какой ключ верхнего уровня следует использовать.
[раздел реестра]\
Software
\
Microsoft
\
VisualStudio
\
[корень версии]\
[корневой каталог метрик]\
[тип метрики]\
[метрика] = [значение метрики]
[метрика] = [значение метрики]
[метрика] = [значение метрики]
Заполнитель | Description |
---|---|
[раздел реестра] | HKEY_CURRENT_USER или HKEY_LOCAL_MACHINE . |
[корень версии] | Версия Visual Studio (например, или 7.0 7.1 8.0 ). Однако этот корневой каталог также можно изменить с помощью переключателя /rootuffix на devenv.exe. Для VSIP этот модификатор обычно является Exp, поэтому корень версии будет, например, 8.0Exp. |
[корневой каталог метрик] | Это или AD7Metrics AD7Metrics(Debug) , в зависимости от того, используется ли отладочная версия dbgmetric.lib. Примечание. Используется ли dbgmetric.lib, это соглашение об именовании должно соответствовать, если у вас есть различия между версиями отладки и выпуска, которые должны отражаться в реестре. |
[тип метрики] | Тип метрики для записи: Engine , ExpressionEvaluator , SymbolProvider и т. д. Это все определяется как в dbgmetric.h as metricTypeXXXX , где XXXX указано имя конкретного типа. |
[метрика] | Имя записи, назначаемой значением, чтобы задать метрику. Фактическая организация метрик зависит от типа метрик. |
[значение метрики] | Значение, назначенное метрику. Тип значения должен иметь (строка, число и т. д.) зависит от метрики. |
Примечание.
Все идентификаторы GUID хранятся в формате {GUID}
. Например, {123D150B-FA18-461C-B218-45B3E4589F9B}
.
Обработчики отладки
Ниже приведена организация метрик обработчиков отладки в реестре. Engine
— имя типа метрик для подсистемы отладки и соответствует [типу метрик] в приведенном выше поддереве реестра.
Engine
\
[guid обработчика]\
CLSID
= [guid класса]
[метрика] = [значение метрики]
[метрика] = [значение метрики]
[метрика] = [значение метрики]
PortSupplier
\
0
= [guid поставщика портов]
1
= [guid поставщика портов]
Заполнитель | Description |
---|---|
[guid обработчика] | GUID обработчика отладки. |
[guid класса] | GUID класса, реализующего этот модуль отладки. |
[guid поставщика портов] | GUID поставщика портов, если таковой есть. Многие обработчики отладки используют поставщика портов по умолчанию и поэтому не указывают собственного поставщика. В этом случае подраздел PortSupplier будет отсутствует. |
Поставщики портов
Ниже приведена организация метрик поставщика портов в реестре. PortSupplier
— имя типа метрики для поставщика портов и соответствует [типу метрик].
PortSupplier
\
[guid поставщика портов]\
CLSID
= [guid класса]
[метрика] = [значение метрики]
[метрика] = [значение метрики]
Заполнитель | Description |
---|---|
[guid поставщика портов] | GUID поставщика портов |
[guid класса] | GUID класса, реализующего этот поставщик портов |
Поставщики символов
Ниже приведена организация метрик поставщика символов в реестре. SymbolProvider
— имя типа метрик для поставщика символов и соответствует [типу метрик].
SymbolProvider
\
[guid поставщика символов]\
file
\
CLSID
= [guid класса]
[метрика] = [значение метрики]
[метрика] = [значение метрики]
metadata
\
CLSID
= [guid класса]
[метрика] = [значение метрики]
[метрика] = [значение метрики]
Заполнитель | Description |
---|---|
[guid поставщика символов] | GUID поставщика символов |
[guid класса] | GUID класса, реализующего этот поставщик символов |
Вычислители выражений
Ниже приведена организация метрик вычислителя выражений в реестре. ExpressionEvaluator
— имя типа метрик для вычислителя выражений и соответствует [типу метрики].
Примечание.
Тип метрик для ExpressionEvaluator
не определен в dbgmetric.h, так как предполагается, что все изменения метрик для вычислителей выражений будут проходить через соответствующие функции метрики вычислителя выражений (макет ExpressionEvaluator
подраздела несколько сложный, поэтому детали скрыты внутри dbgmetric.lib).
ExpressionEvaluator
\
[guid языка]\
[guid поставщика]\
CLSID
= [guid класса]
[метрика] = [значение метрики]
[метрика] = [значение метрики]
Engine
\
0
= [guid модуля отладки]
1
= [guid модуля отладки]
Заполнитель | Description |
---|---|
[guid языка] | GUID языка |
[guid поставщика] | GUID поставщика |
[guid класса] | GUID класса, реализующего этот средство оценки выражений |
[guid модуля отладки] | GUID обработчика отладки, с которым работает средство оценки выражений. |
Расширения вычислителя выражений
Ниже приведена организация метрик расширения средства оценки выражений в реестре. EEExtensions
— это имя типа метрик для расширений вычислителя выражений и соответствует [типу метрик].
EEExtensions
\
[guid расширения]\
[метрика] = [значение метрики]
[метрика] = [значение метрики]
Заполнитель | Description |
---|---|
[guid расширения] | GUID расширения вычислителя выражений |
Исключения
Ниже приведена организация метрик исключений в реестре. Exception
— имя типа метрик для исключений и соответствует [типу метрик].
Exception
\
[guid модуля отладки]\
[типы исключений]\
[исключение]\
[метрика] = [значение метрики]
[метрика] = [значение метрики]
[исключение]\
[метрика] = [значение метрики]
[метрика] = [значение метрики]
Заполнитель | Description |
---|---|
[guid модуля отладки] | GUID обработчика отладки, поддерживающего исключения. |
[типы исключений] | Общее название подраздела, определяющее класс исключений, которые можно обрабатывать. Типичными именами являются исключения C++, исключения Win32, исключения среды CLR и собственные проверки времени выполнения. Эти имена также используются для идентификации определенного класса исключения для пользователя. |
[исключение] | Имя исключения: например, _com_error или Control-Break. Эти имена также используются для идентификации определенного исключения для пользователя. |
Requirements
Эти файлы находятся в каталоге установки пакета SDK Microsoft Visual Studio 2010 (по умолчанию [диск]\Program Files\Microsoft Visual Studio 2010 SDK\).
Заголовок: include\dbgmetric.h
Библиотека: libs\ad2de.lib, libs\dbgmetric.lib