Asistentes de SDK para la depuración

Estas funciones y declaraciones son funciones auxiliares globales para implementar motores de depuración, evaluadores de expresiones y proveedores de símbolos en C++.

Nota:

No hay versiones administradas de estas funciones y declaraciones en este momento.

Para que Visual Studio use motores de depuración, evaluadores de expresiones y proveedores de símbolos, deben registrarse. Esto se hace estableciendo subclaves del Registro y entradas, lo que se conoce como "establecer métricas". Las siguientes funciones globales están diseñadas para facilitar el proceso de actualización de estas métricas. Consulte la sección ubicaciones del Registro para averiguar el diseño de cada subclave del Registro que actualiza estas funciones.

Funciones generales de métricas

Estas son funciones generales que usan los motores de depuración. Las funciones especializadas para evaluadores de expresiones y proveedores de símbolos se detallan más adelante.

GetMetric (método)

Recupera un valor de métrica del Registro.

HRESULT GetMetric(
   LPCWSTR pszMachine,
   LPCWSTR pszType,
   REFGUID guidSection,
   LPCWSTR pszMetric,
   DWORD * pdwValue,
   LPCWSTR pszAltRoot
);
Parámetro Descripción
pszMachine [in] Nombre de una máquina posiblemente remota cuyo registro se escribirá (NULL significa máquina local).
pszType [in] Uno de los tipos de métricas.
guidSection [in] GUID de un motor específico, evaluador, excepción, etc. Especifica una subsección bajo un tipo de métrica para un elemento específico.
pszMetric [in] Métrica que se va a obtener. Esto corresponde a un nombre de valor específico.
pdwValue [in] Ubicación de almacenamiento del valor de la métrica. Hay varios tipos de GetMetric que pueden devolver un DWORD (como en este ejemplo), un BSTR, un GUID o una matriz de GUID.
pszAltRoot [in] Una raíz del Registro alternativa que se va a usar. Establézcalo en NULL para usar el valor predeterminado.

SetMetric (método)

Establece el valor de métrica especificado en el Registro.

HRESULT SetMetric(
         LPCWSTR pszType,
         REFGUID guidSection,
         LPCWSTR pszMetric,
   const DWORD   dwValue,
         bool    fUserSpecific,
         LPCWSTR pszAltRoot
);
Parámetro Descripción
pszType [in] Uno de los tipos de métricas.
guidSection [in] GUID de un motor específico, evaluador, excepción, etc. Especifica una subsección bajo un tipo de métrica para un elemento específico.
pszMetric [in] Métrica que se va a obtener. Esto corresponde a un nombre de valor específico.
dwValue [in] Ubicación de almacenamiento del valor en la métrica. Hay varios tipos de SetMetric que pueden almacenar un DWORD (en este ejemplo), un BSTR, un GUID o una matriz de GUID.
fUserSpecific [in] TRUE si la métrica es específica del usuario y si se debe escribir en el subárbol del usuario en lugar del subárbol del equipo local.
pszAltRoot [in] Una raíz del Registro alternativa que se va a usar. Establézcalo en NULL para usar el valor predeterminado.

RemoveMetric (método)

Quita la métrica especificada del Registro.

HRESULT RemoveMetric(
   LPCWSTR pszType,
   REFGUID guidSection,
   LPCWSTR pszMetric,
   LPCWSTR pszAltRoot
);
Parámetro Descripción
pszType [in] Uno de los tipos de métricas.
guidSection [in] GUID de un motor específico, evaluador, excepción, etc. Especifica una subsección bajo un tipo de métrica para un elemento específico.
pszMetric [in] Métrica que se va a quitar. Esto corresponde a un nombre de valor específico.
pszAltRoot [in] Una raíz del Registro alternativa que se va a usar. Establézcalo en NULL para usar el valor predeterminado.

EnumMetricSections (método)

Enumera las distintas secciones de métricas del Registro.

HRESULT EnumMetricSections(
   LPCWSTR pszMachine,
   LPCWSTR pszType,
   GUID *  rgguidSections,
   DWORD * pdwSize,
   LPCWSTR pszAltRoot
);
Parámetro Descripción
pszMachine [in] Nombre de una máquina posiblemente remota cuyo registro se escribirá (NULL significa máquina local).
pszType [in] Uno de los tipos de métricas.
rgguidSections [dentro, fuera] Matriz preasignada de GUID que se van a rellenar.
pdwSize [in] Número máximo de GUID que se pueden almacenar en la rgguidSections matriz.
pszAltRoot [in] Una raíz del Registro alternativa que se va a usar. Establézcalo en NULL para usar el valor predeterminado.

Funciones del evaluador de expresiones

Función Descripción
GetEEMetric Recupera un valor de métrica del Registro.
SetEEMetric Establece el valor de métrica especificado en el Registro.
RemoveEEMetric Quita la métrica especificada del Registro.
GetEEMetricFile Obtiene un nombre de archivo de la métrica especificada y lo carga, devolviendo el contenido del archivo como una cadena.

Funciones de excepción

Función Descripción
GetExceptionMetric Recupera un valor de métrica del Registro.
SetExceptionMetric Establece el valor de métrica especificado en el Registro.
RemoveExceptionMetric Quita la métrica especificada del Registro.
RemoveAllExceptionMetrics Quita todas las métricas de excepción del Registro.

Funciones del proveedor de símbolos

Función Descripción
GetSPMetric Recupera un valor de métrica del Registro.
SetSPMetric Establece el valor de métrica especificado en el Registro.
RemoveSPMetric Quita la métrica especificada del Registro.

Funciones de enumeración

Función Descripción
EnumMetricSections Enumera todas las métricas de un tipo de métrica especificado.
EnumDebugEngine Enumera los motores de depuración registrados.
EnumEEs Enumera los evaluadores de expresiones registradas.
EnumExceptionMetrics Enumera todas las métricas de excepción.

Definiciones de métricas

Estas definiciones se pueden usar para nombres de métrica predefinidos. Los nombres corresponden a varias claves del Registro y nombres de valor y se definen como cadenas de caracteres anchos: por ejemplo, extern LPCWSTR metrictypeEngine.

Tipos de métricas predefinidos Descripción: la clave base para......
metrictypeEngine Todas las métricas del motor de depuración.
metrictypePortSupplier Todas las métricas del proveedor de puertos.
metrictypeException Todas las métricas de excepción.
metricttypeEEExtension Todas las extensiones del evaluador de expresiones.
Propiedades del motor de depuración Descripción
metricAddressBP Establézcalo en distinto de cero para indicar la compatibilidad con los puntos de interrupción de dirección.
metricAlwaysLoadLocal Establézcalo en distinto de cero para cargar siempre el motor de depuración localmente.
metricLoadInDebuggeeSession NO SE UTILIZA
metricLoadedByDebuggee Establézcalo en distinto de cero para indicar que el motor de depuración siempre se cargará con o con el programa que se está depurando.
metricAttach Establézcalo en distinto de cero para indicar la compatibilidad con los datos adjuntos a los programas existentes.
métricaCallStackBP Establézcalo en distinto de cero para indicar la compatibilidad con los puntos de interrupción de la pila de llamadas.
metricConditionalBP Establézcalo en distinto de cero para indicar la compatibilidad con la configuración de puntos de interrupción condicionales.
metricDataBP Establézcalo en distinto de cero para indicar la compatibilidad con la configuración de puntos de interrupción en los cambios en los datos.
metricDisassembly Establézcalo en distinto de cero para indicar la compatibilidad con la producción de una lista de desensamblaje.
metricDumpWriting Establézcalo en distinto de cero para indicar la compatibilidad con la escritura de volcados de memoria (el volcado de memoria en un dispositivo de salida).
metricENC Establézcalo en distinto de cero para indicar la compatibilidad con Editar y continuar. Nota: Un motor de depuración personalizado nunca debe establecerlo o siempre debe establecerlo en 0.
metricExceptions Establézcalo en distinto de cero para indicar la compatibilidad con excepciones.
metricFunctionBP Establezca en distinto de cero para indicar la compatibilidad con puntos de interrupción con nombre (puntos de interrupción que se interrumpen cuando se llama a un nombre de función determinado).
metricHitCountBP Establézcalo en distinto de cero para indicar la compatibilidad con el valor de puntos de interrupción de "punto de acierto" (puntos de interrupción que se desencadenan solo después de alcanzar un número determinado de veces).
metricJITDebug Establézcalo en distinto de cero para indicar la compatibilidad con la depuración Just-In-Time (el depurador se inicia cuando se produce una excepción en un proceso en ejecución).
metricMemory NO SE UTILIZA
metricPortSupplier Establézcalo en el CLSID del proveedor de puertos si se implementa uno.
metricRegisters NO SE UTILIZA
metricSetNextStatement Establézcalo en distinto de cero para indicar la compatibilidad para establecer la siguiente instrucción (que omite la ejecución de instrucciones intermedias).
metricSuspendThread Establézcalo en distinto de cero para indicar la compatibilidad con la suspensión de la ejecución del subproceso.
metricWarnIfNoSymbols Establézcalo en distinto de cero para indicar que se debe notificar al usuario si no hay símbolos.
metricProgramProvider Establézcalo en el CLSID del proveedor del programa.
metricAlwaysLoadProgramProviderLocal Establézcalo en distinto de cero para indicar que el proveedor del programa siempre debe cargarse localmente.
metricEngineCanWatchProcess Establézcalo en distinto de cero para indicar que el motor de depuración observará los eventos de proceso en lugar del proveedor del programa.
metricRemoteDebugging Establézcalo en distinto de cero para indicar la compatibilidad con la depuración remota.
metricEncUseNativeBuilder Establézcalo en distinto de cero para indicar que el Administrador de edición y continuación debe usar el archivo encbuild.dll del motor de depuración para compilar para Editar y continuar. Nota: Un motor de depuración personalizado nunca debe establecerlo o siempre debe establecerlo en 0.
metricLoadUnderWOW64 Establézcalo en distinto de cero para indicar que el motor de depuración debe cargarse en el proceso depurado en WOW al depurar un proceso de 64 bits; De lo contrario, el motor de depuración se cargará en el proceso de Visual Studio (que se ejecuta en WOW64).
métricaLoadProgramProviderUnderWOW64 Establézcalo en distinto de cero para indicar que el proveedor de programas debe cargarse en el proceso depurado al depurar un proceso de 64 bits en WOW; De lo contrario, se cargará en el proceso de Visual Studio.
métricaStopOnExceptionCrossingManagedBoundary Establézcalo en distinto de cero para indicar que el proceso debe detenerse si se produce una excepción no controlada en los límites de código administrados o no administrados.
metricAutoSelectPriority Establézcalo en una prioridad para la selección automática del motor de depuración (los valores más altos son iguales a mayor prioridad).
metricAutoSelectIncompatibleList Clave del Registro que contiene entradas que especifican GUID para los motores de depuración que se omitirán en la selección automática. Estas entradas son un número (0, 1, 2, etc.) con un GUID expresado como una cadena.
metricIncompatibleList Clave del Registro que contiene entradas que especifican GUID para motores de depuración que no son compatibles con este motor de depuración.
metricDisableJITOptimization Establézcalo en distinto de cero para indicar que las optimizaciones Just-In-Time (para código administrado) deben deshabilitarse durante la depuración.
Propiedades del evaluador de expresiones Descripción
metricEngine Contiene el número de motores de depuración que admiten el evaluador de expresiones especificado.
metricPreloadModules Establézcalo en distinto de cero para indicar que los módulos deben cargarse previamente cuando se inicia un evaluador de expresiones en un programa.
metricThisObjectName Establézcalo en el nombre del objeto "this".
Propiedades de extensión del evaluador de expresiones Descripción
metricExtensionDll Nombre del archivo DLL que admite esta extensión.
metricExtensionRegistersSupported Lista de registros admitidos.
metricExtensionRegistersEntryPoint Punto de entrada para acceder a los registros.
metricExtensionTypesSupported Lista de tipos admitidos.
metricExtensionTypesEntryPoint Punto de entrada para acceder a los tipos.
Propiedades del proveedor de puertos Descripción
metricPortPickerCLSID CLSID del selector de puertos (un cuadro de diálogo que el usuario puede usar para seleccionar puertos y agregar puertos que se usarán para la depuración).
metricDisallowUserEnteredPorts Distinto de cero si los puertos introducidos por el usuario no se pueden agregar al proveedor de puertos (esto hace que el cuadro de diálogo selector de puertos esencialmente sea de solo lectura).
metricPidBase Identificador de proceso base utilizado por el proveedor de puertos al asignar identificadores de proceso.
Tipos de almacén de SP predefinidos Descripción
storetypeFile Los símbolos se almacenan en un archivo independiente.
storetypeMetadata Los símbolos se almacenan como metadatos en un ensamblado.
Propiedades varias Descripción
metricShowNonUserCode Establézcalo en distinto de cero para mostrar código que no sea de usuario.
métricaJustMyCodeStepping Establézcalo en distinto de cero para indicar que la ejecución paso a paso solo puede producirse en el código de usuario.
metricCLSID CLSID para un objeto de un tipo de métrica específico.
metricName Nombre descriptivo para un objeto de un tipo de métrica específico.
metricLanguage Nombre del idioma.

Ubicaciones del Registro

Las métricas se leen y escriben en el Registro, específicamente en la VisualStudio subclave.

Nota:

La mayoría de las veces, las métricas se escribirán en la clave de HKEY_LOCAL_MACHINE. Sin embargo, a veces HKEY_CURRENT_USER será la clave de destino. Dbgmetric.lib controla ambas claves. Al obtener una métrica, busca primero HKEY_CURRENT_USER y, a continuación, HKEY_LOCAL_MACHINE. Cuando se establece una métrica, un parámetro especifica qué clave de nivel superior se va a usar.

[clave del Registro]\

Software\

Microsoft\

VisualStudio\

[raíz de versión]\

[raíz de métrica]\

[tipo de métrica]\

[métrica] = [valor de métrica]

[métrica] = [valor de métrica]

[métrica] = [valor de métrica]

Marcador de posición Descripción
[clave del Registro] HKEY_CURRENT_USER o HKEY_LOCAL_MACHINE.
[raíz de versión] La versión de Visual Studio (por ejemplo, 7.0, 7.1o 8.0). Sin embargo, esta raíz también se puede modificar mediante el modificador /rootuffix a devenv.exe. Para VSIP, este modificador suele ser Exp, por lo que la raíz de la versión sería, por ejemplo, 8.0Exp.
[raíz de métrica] Esto es AD7Metrics o AD7Metrics(Debug), en función de si se usa la versión de depuración de dbgmetric.lib. Nota: Si se usa o no dbgmetric.lib, esta convención de nomenclatura debe cumplirse si tiene diferencias entre las versiones de depuración y versión que se deben reflejar en el registro.
[tipo de métrica] Tipo de métrica que se va a escribir: Engine, ExpressionEvaluator, SymbolProvider, etc. Todos se definen como en dbgmetric.h como metricTypeXXXX, donde XXXX es el nombre de tipo específico.
[métrica] Nombre de una entrada a la que se va a asignar un valor para establecer la métrica. La organización real de las métricas depende del tipo de métrica.
[valor de métrica] Valor asignado a la métrica. El tipo que debe tener el valor (cadena, número, etc.) depende de la métrica.

Nota:

Todos los GUID se almacenan en el formato de {GUID}. Por ejemplo, {123D150B-FA18-461C-B218-45B3E4589F9B}.

Motores de depuración

A continuación se muestra la organización de las métricas de los motores de depuración en el registro. Engine es el nombre de tipo de métrica de un motor de depuración y corresponde a [tipo de métrica] en el subárbol del Registro anterior.

Engine\

[guid del motor]\

CLSID = [guid de clase]

[métrica] = [valor de métrica]

[métrica] = [valor de métrica]

[métrica] = [valor de métrica]

PortSupplier\

0 = [guid del proveedor de puertos]

1 = [guid del proveedor de puertos]

Marcador de posición Descripción
[guid del motor] GUID del motor de depuración.
[guid de clase] GUID de la clase que implementa este motor de depuración.
[guid del proveedor de puertos] GUID del proveedor de puertos, si existe. Muchos motores de depuración usan el proveedor de puertos predeterminado y, por lo tanto, no especifican su propio proveedor. En este caso, la subclave PortSupplier estará ausente.

Proveedores de puertos

A continuación se muestra la organización de las métricas del proveedor de puertos en el Registro. PortSupplier es el nombre del tipo de métrica para un proveedor de puertos y corresponde a [tipo de métrica].

PortSupplier\

[guid del proveedor de puertos]\

CLSID = [guid de clase]

[métrica] = [valor de métrica]

[métrica] = [valor de métrica]

Marcador de posición Descripción
[guid del proveedor de puertos] GUID del proveedor de puertos
[guid de clase] GUID de la clase que implementa este proveedor de puertos

Proveedores de símbolos

A continuación se muestra la organización de las métricas del proveedor de símbolos en el Registro. SymbolProvider es el nombre de tipo de métrica para el proveedor de símbolos y corresponde a [tipo de métrica].

SymbolProvider\

[guid del proveedor de símbolos]\

file\

CLSID = [guid de clase]

[métrica] = [valor de métrica]

[métrica] = [valor de métrica]

metadata\

CLSID = [guid de clase]

[métrica] = [valor de métrica]

[métrica] = [valor de métrica]

Marcador de posición Descripción
[guid del proveedor de símbolos] GUID del proveedor de símbolos
[guid de clase] GUID de la clase que implementa este proveedor de símbolos

Evaluadores de expresiones

A continuación se muestra la organización de las métricas del evaluador de expresiones en el Registro. ExpressionEvaluator es el nombre del tipo de métrica para el evaluador de expresiones y corresponde a [tipo de métrica].

Nota:

El tipo de métrica para ExpressionEvaluator no se define en dbgmetric.h, ya que se supone que todos los cambios de métrica para evaluadores de expresiones pasarán por las funciones de métricas del evaluador de expresiones adecuadas (el diseño de la ExpressionEvaluator subclave es algo complicado, por lo que los detalles se ocultan dentro de dbgmetric.lib).

ExpressionEvaluator\

[guid de idioma]\

[guid del proveedor]\

CLSID = [guid de clase]

[métrica] = [valor de métrica]

[métrica] = [valor de métrica]

Engine\

0 = [guid del motor de depuración]

1 = [guid del motor de depuración]

Marcador de posición Descripción
[guid de idioma] GUID de un idioma
[guid del proveedor] Guid de un proveedor
[guid de clase] GUID de la clase que implementa este evaluador de expresiones
[guid del motor de depuración] Guid de un motor de depuración con el que funciona este evaluador de expresiones

Extensiones del evaluador de expresiones

A continuación se muestra la organización de las métricas de extensión del evaluador de expresiones en el Registro. EEExtensions es el nombre de tipo de métrica para las extensiones del evaluador de expresiones y corresponde a [tipo de métrica].

EEExtensions\

[guid de extensión]\

[métrica] = [valor de métrica]

[métrica] = [valor de métrica]

Marcador de posición Descripción
[guid de extensión] GUID de una extensión del evaluador de expresiones

Excepciones

A continuación se muestra la organización de las métricas de excepciones en el Registro. Exception es el nombre de tipo de métrica para las excepciones y corresponde a [tipo de métrica].

Exception\

[guid del motor de depuración]\

[tipos de excepción]\

[excepción]\

[métrica] = [valor de métrica]

[métrica] = [valor de métrica]

[excepción]\

[métrica] = [valor de métrica]

[métrica] = [valor de métrica]

Marcador de posición Descripción
[guid del motor de depuración] GUID de un motor de depuración que admite excepciones.
[tipos de excepción] Título general de la subclave que identifica la clase de excepciones que se puede controlar. Los nombres típicos son excepciones de C++, excepciones de Win32, excepciones de Common Language Runtime y comprobaciones en tiempo de ejecución nativas. Estos nombres también se usan para identificar una clase determinada de excepción al usuario.
[excepción] Un nombre para una excepción: por ejemplo, _com_error o Control-Break. Estos nombres también se usan para identificar una excepción determinada al usuario.

Requisitos

Estos archivos se encuentran en el directorio de instalación del SDK de Microsoft Visual Studio 2010 (de forma predeterminada, [unidad]\Archivos de programa\Microsoft Visual Studio 2010 SDK\).

Encabezado: includes\dbgmetric.h

Biblioteca: libs\ad2de.lib, libs\dbgmetric.lib

Consulte también