Sdílet prostřednictvím


Registrace vlastního ladicího modulu

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, jak zaregistrovat debugovací stroj, najdete v ukázce TextInterpreter, která je vytvořená v rámci tutoriálu: Sestavení debugovacího stroje pomocí 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. Pak se musí ladicí stroj zaregistrovat ve Visual Studio, aby se stanovily všechny vlastnosti (jinak označované jako metriky), které ladicí stroj 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.

Example

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