Udostępnij za pośrednictwem


Rejestrowanie niestandardowego aparatu debugowania

Aparat debugowania musi zarejestrować się jako fabrykę klas, postępując zgodnie z konwencjami COM, a także zarejestrować się w programie Visual Studio za pomocą podklucza rejestru programu Visual Studio.

Uwaga

Przykład rejestrowania aparatu debugowania można znaleźć w przykładzie TextInterpreter, który jest kompilowany w ramach samouczka: kompilowanie aparatu debugowania przy użyciu modelu ATL COM.

Proces serwera DLL

Aparat debugowania jest zwykle konfigurowany we własnej biblioteki DLL jako serwer COM. W związku z tym aparat debugowania musi zarejestrować identyfikator CLSID swojej fabryki klas za pomocą modelu COM, zanim program Visual Studio będzie mógł uzyskać do niego dostęp. Następnie aparat debugowania musi zarejestrować się w programie Visual Studio, aby ustanowić wszelkie właściwości (inaczej znane jako metryki), które obsługuje aparat debugowania. Wybór metryk zapisanych w podkluczu rejestru programu Visual Studio zależy od funkcji, które obsługuje aparat debugowania.

Pomocnicy zestawu SDK do debugowania opisują nie tylko lokalizacje rejestru niezbędne do zarejestrowania aparatu debugowania; opisuje również bibliotekę dbgmetric.lib , która zawiera wiele przydatnych funkcji i deklaracji dla deweloperów języka C++, które ułatwiają manipulowanie rejestrem.

Przykład

W poniższym przykładzie (z przykładu TextInterpreter) pokazano, jak używać SetMetric funkcji (z pliku dbgmetric.lib), aby zarejestrować aparat debugowania w programie Visual Studio. Przekazywane metryki są również definiowane w pliku dbgmetric.lib.

Uwaga

TextInterpreter to podstawowy aparat debugowania; nie jest on skonfigurowany — i dlatego nie rejestruje — żadnych innych funkcji. Bardziej kompletny aparat debugowania miałby całą listę wywołań SetMetric lub ich odpowiednik, po jednym dla każdej funkcji obsługiwanej przez aparat debugowania.

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