Registrar um mecanismo de depuração personalizado
O mecanismo de depuração deve se registrar como uma fábrica de classes, seguindo convenções COM, bem como registrar com o 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 ATL COM.
Processo do servidor DLL
Um mecanismo de depuração é normalmente configurado em sua própria DLL como um servidor COM. Como tal, o mecanismo de depuração deve registrar o CLSID de sua fábrica de classe com COM antes que o Visual Studio possa acessá-lo. Em seguida, o mecanismo de depuração deve registrar-se com o Visual Studio para estabelecer quaisquer propriedades (também conhecidas como métricas) que o mecanismo de depuração suporta. A escolha das métricas gravadas na subchave do Registro do Visual Studio depende dos recursos suportados pelo mecanismo de depuração.
SDK helpers for debugging descreve não apenas os locais do Registro necessários para registrar um mecanismo de depuração, mas também descreve a biblioteca dbgmetric.lib, que contém uma série de funções e declarações úteis para desenvolvedores C++ que facilitam a manipulação do Registro.
Exemplo
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 mecanismo de depuração mais completo teria uma lista inteira de chamadas ou seu equivalente, uma para cada recurso suportado pelo mecanismo de SetMetric
depuração.
// 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);
}