Compartilhar via


Registrar um mecanismo de depuração personalizado

O mecanismo de depuração deve se registrar como uma fábrica de classes, seguindo as convenções COM, bem como registrar-se no Visual Studio por meio da subchave do Registro do Visual Studio.

Observação

Você pode encontrar um exemplo de como registrar um mecanismo de depuração no exemplo TextInterpreter, que é criado como parte do Tutorial: Criando um mecanismo de depuração usando o ATL COM.

Processo do servidor DLL

Um mecanismo de depuração normalmente é configurado em sua própria DLL como um servidor COM. Dessa forma, o mecanismo de depuração deve registrar o CLSID de sua fábrica de classes no COM antes que o Visual Studio possa ter acesso a ele. Em seguida, o mecanismo de depuração deve se registrar no Visual Studio para estabelecer quaisquer propriedades (também conhecidas como métricas) que o mecanismo de depuração dá suporte. A escolha das métricas gravadas na subchave do Registro do Visual Studio depende dos recursos que o mecanismo de depuração suporta.

Os auxiliares do SDK para depuração descrevem não apenas os locais de registro necessários para registrar um mecanismo de depuração; também descreve a biblioteca dbgmetric.lib , que contém várias funções e declarações úteis para desenvolvedores do C++ que facilitam a manipulação do registro.

Example

O exemplo a seguir (do exemplo TextInterpreter) mostra como usar a SetMetric função (de dbgmetric.lib) para registrar um mecanismo de depuração com o Visual Studio. As métricas que estão sendo passadas também são definidas em dbgmetric.lib.

Observação

TextInterpreter é um mecanismo de depuração básico; ele não configura — e, portanto, não registra — nenhum outro recurso. Um motor de depuração mais completo teria uma lista inteira de SetMetric chamadas ou seus equivalentes, uma para cada recurso que o motor de depuração suporta.

// 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);
}