Condividi tramite


Registrare un motore di debug personalizzato

Il motore di debug deve registrarsi come class factory, seguendo le convenzioni COM e registrarsi con Visual Studio tramite la sottochiave del Registro di sistema di Visual Studio.

Nota

È possibile trovare un esempio di come registrare un motore di debug nell'esempio TextInterpreter, creato come parte dell'esercitazione : Compilazione di un motore di debug tramite ATL COM.

Processo del server DLL

Un motore di debug viene in genere configurato nella propria DLL come server COM. Di conseguenza, il motore di debug deve registrare il CLSID della class factory con COM prima che Visual Studio possa accedervi. Il motore di debug deve quindi registrarsi con Visual Studio per stabilire eventuali proprietà (altrimenti note come metriche) supportate dal motore di debug. La scelta delle metriche scritte nella sottochiave del Registro di sistema di Visual Studio dipende dalle funzionalità supportate dal motore di debug.

Gli helper SDK per il debug descrivono non solo i percorsi del Registro di sistema necessari per registrare un motore di debug, ma descrive anche la libreria dbgmetric.lib , che contiene una serie di funzioni e dichiarazioni utili per gli sviluppatori C++ che semplificano la modifica del Registro di sistema.

Esempio

L'esempio seguente (dall'esempio TextInterpreter) illustra come usare la SetMetric funzione (da dbgmetric.lib) per registrare un motore di debug con Visual Studio. Le metriche passate vengono definite anche in dbgmetric.lib.

Nota

TextInterpreter è un motore di debug di base; non viene configurato e pertanto non registra alcuna altra funzionalità. Un motore di debug più completo include un elenco completo di SetMetric chiamate o il relativo equivalente, uno per ogni funzionalità supportata dal motore di debug.

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