Compartir a través de


Registro de un motor de depuración personalizado

El motor de depuración debe registrarse como generador de clases, siguiendo las convenciones COM, así como registrarse con Visual Studio a través de la subclave del Registro de Visual Studio.

Nota:

Puede encontrar un ejemplo de cómo registrar un motor de depuración en el ejemplo TextInterpreter, que se crea como parte del Tutorial: Creación de un motor de depuración mediante ATL COM.

Proceso del servidor DLL

Normalmente, un motor de depuración se configura en su propio archivo DLL como un servidor COM. Por lo tanto, el motor de depuración debe registrar el CLSID de su generador de clases con COM antes de que Visual Studio pueda acceder a él. A continuación, el motor de depuración debe registrarse en Visual Studio para establecer cualquier propiedad (lo que se conoce como métricas) que admita el motor de depuración. La elección de métricas escritas en la subclave del Registro de Visual Studio depende de las características que admite el motor de depuración.

Los asistentes del SDK para la depuración describen no solo las ubicaciones del Registro necesarias para registrar un motor de depuración; también describe la biblioteca dbgmetric.lib , que contiene una serie de funciones y declaraciones útiles para los desarrolladores de C++ que facilitan la manipulación del registro.

Ejemplo

En el ejemplo siguiente (del ejemplo TextInterpreter) se muestra cómo usar la SetMetric función (de dbgmetric.lib) para registrar un motor de depuración con Visual Studio. Las métricas que se pasan también se definen en dbgmetric.lib.

Nota:

TextInterpreter es un motor de depuración básico; no se configura y, por lo tanto, no se registra ninguna otra característica. Un motor de depuración más completo tendría una lista completa de SetMetric llamadas o su equivalente, una para cada característica que admite el motor de depuración.

// Define base registry subkey to Visual Studio.
static const WCHAR strRegistrationRoot[] = L"Software\\Microsoft\\VisualStudio\\8.0";

HRESULT CTextInterpreterModule::RegisterServer(BOOL bRegTypeLib, const CLSID * pCLSID)
{
    SetMetric(metrictypeEngine, __uuidof(Engine), metricName, L"Text File", false, strRegistrationRoot);
    SetMetric(metrictypeEngine, __uuidof(Engine), metricCLSID, CLSID_Engine, false, strRegistrationRoot);
    SetMetric(metrictypeEngine, __uuidof(Engine), metricProgramProvider, CLSID_MsProgramProvider, false, strRegistrationRoot);

    return base::RegisterServer(bRegTypeLib, pCLSID);
}