Registrando um mecanismo de depuração personalizada
O mecanismo de depuração deve se registrar como uma fábrica de classes a seguir as convenções de COM, bem como registrar com Visual Studio por meio da subchave do registro Visual Studio.
Dica
Um exemplo de como registrar um mecanismo de depuração pode ser encontrado em uma amostra TextInterpreter, que é criada como parte do Tutorial: Building a Debug Engine Using ATL COM.
Processo do servidor de DLL
Normalmente, um mecanismo de depuração é implementado na sua própria DLL como um servidor COM. Isso significa que o mecanismo de depuração deve registrar o CLSID de sua fábrica de classes com antes de Visual Studio pode acessá-lo. Em seguida, o mecanismo de depuração deve ser registrado com Visual Studio próprio para estabelecer as propriedades (também conhecida como métricas) do debug engine oferece suporte. A escolha de métricas que foram criadas para a subchave de registro Visual Studio para o mecanismo de depuração depende dos recursos que o mecanismo de depuração oferece suporte.
SDK auxiliares para depuraçãoDescreve não apenas os locais de registro necessários para registrar um mecanismo de depuração; Ele também descreve a biblioteca de dbgmetric.lib, que contém um número de funções úteis e declarações para desenvolvedores de C++ que tornam manipulando o registro mais fácil.
Exemplo
A seguir está um exemplo típico (do exemplo TextInterpreter) mostrando como usar o SetMetric funcionar (a partir de dbgmetric.lib), para registrar um mecanismo de depuração com Visual Studio. As métricas que está sendo passadas também são definidas em dbgmetric.lib.
Dica
TextInterpreter é um mecanismo de depuração básica; ele não implementa — e, portanto, não registra — quaisquer outros recursos.Um mecanismo de depuração mais completo teria uma lista de SetMetric chamadas ou seu equivalente, um para cada recurso, o mecanismo de depuração oferece suporte.
// 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);
}