Sdílet prostřednictvím


Registrace vlastního ladicího stroje

Ladicí modul se musí zaregistrovat jako objekt pro vytváření tříd, a to podle konvencí modelu COM a také se zaregistrovat v sadě Visual Studio prostřednictvím podklíče registru sady Visual Studio.

Poznámka:

Příklad registrace ladicího modulu najdete v ukázce TextInterpreter, která je vytvořená jako součást kurzu: Sestavení ladicího modulu pomocí modelu ATL COM.

Proces serveru knihovny DLL

Ladicí modul je obvykle nastaven ve své vlastní knihovně DLL jako server COM. Proto musí ladicí modul zaregistrovat CLSID objektu pro vytváření tříd pomocí modelu COM, aby k němu visual Studio měl přístup. Ladicí modul se pak musí zaregistrovat v sadě Visual Studio, aby se vytvořily všechny vlastnosti (jinak označované jako metriky), které ladicí modul podporuje. Volba metrik zapsaných do podklíče registru sady Visual Studio závisí na funkcích, které ladicí modul podporuje.

Pomocné rutiny sady SDK pro ladění popisují nejen umístění registru potřebná k registraci ladicího modulu. Popisuje také knihovnu dbgmetric.lib , která obsahuje řadu užitečných funkcí a deklarací pro vývojáře jazyka C++, které usnadňují manipulaci s registrem.

Příklad

Následující příklad (z ukázky TextInterpreter) ukazuje, jak pomocí SetMetric funkce (z dbgmetric.lib) zaregistrovat ladicí modul v sadě Visual Studio. Předávané metriky jsou také definovány v dbgmetric.lib.

Poznámka:

TextInterpreter je základní ladicí modul; nenastavuje (a proto se neregistruje) žádné další funkce. Kompletní ladicí modul by měl celý seznam SetMetric volání nebo jejich ekvivalent, jeden pro každou funkci, kterou ladicí modul podporuje.

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