Inscrire un moteur de débogage personnalisé

Le moteur de débogage doit s’inscrire en tant que fabrique de classes, en suivant les conventions COM et en s’inscrivant auprès de Visual Studio via la sous-clé de Registre Visual Studio.

Remarque

Vous trouverez un exemple d’inscription d’un moteur de débogage dans l’exemple TextInterpreter, qui est généré dans le cadre du tutoriel : Création d’un moteur de débogage à l’aide d’ATL COM.

Processus du serveur DLL

Un moteur de débogage est généralement configuré dans sa propre DLL en tant que serveur COM. Par conséquent, le moteur de débogage doit inscrire le CLSID de sa fabrique de classes auprès de COM avant que Visual Studio puisse y accéder. Ensuite, le moteur de débogage doit s’inscrire auprès de Visual Studio pour établir les propriétés (autrement appelées métriques) prises en charge par le moteur de débogage. Le choix des métriques écrites dans la sous-clé de Registre Visual Studio dépend des fonctionnalités prises en charge par le moteur de débogage.

Les helpers du SDK pour le débogage décrivent non seulement les emplacements de Registre nécessaires pour inscrire un moteur de débogage ; il décrit également la bibliothèque dbgmetric.lib , qui contient un certain nombre de fonctions et déclarations utiles pour les développeurs C++ qui facilitent la manipulation du registre.

Exemple

L’exemple suivant (à partir de l’exemple TextInterpreter) montre comment utiliser la SetMetric fonction (à partir de dbgmetric.lib) pour inscrire un moteur de débogage auprès de Visual Studio. Les métriques passées sont également définies dans dbgmetric.lib.

Remarque

TextInterpreter est un moteur de débogage de base ; elle n’est pas configurée et n’inscrit donc pas d’autres fonctionnalités. Un moteur de débogage plus complet aurait une liste complète d’appels SetMetric ou leur équivalent, un pour chaque fonctionnalité prise en charge par le moteur de débogage.

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