Регистрация пользовательского обработчика отладки

Модуль отладки должен зарегистрировать себя в качестве фабрики классов, следуя соглашениям COM, а также зарегистрировать в Visual Studio с помощью подраздела реестра Visual Studio.

Примечание.

Пример регистрации обработчика отладки можно найти в примере TextInterpreter, созданном в рамках руководства. Создание обработчика отладки с помощью ATL COM.

Процесс сервера DLL

Обработчик отладки обычно настраивается в собственной библиотеке DLL в качестве COM-сервера. Таким образом, модуль отладки должен зарегистрировать CLSID своей фабрики классов с помощью COM, прежде чем Visual Studio сможет получить к нему доступ. Затем подсистема отладки должна зарегистрировать себя в Visual Studio, чтобы установить любые свойства (метрики), поддерживаемые подсистемой отладки. Выбор метрик, записанных в подраздел реестра Visual Studio, зависит от функций, поддерживаемых подсистемой отладки.

Вспомогательные средства sdk для отладки описывают не только расположения реестра, необходимые для регистрации обработчика отладки; он также описывает библиотеку dbgmetric.lib , которая содержит ряд полезных функций и объявлений для разработчиков C++, которые упрощают управление реестром.

Пример

В следующем примере (из примера TextInterpreter) показано, как использовать SetMetric функцию (из dbgmetric.lib), чтобы зарегистрировать подсистему отладки в Visual Studio. Передаваемые метрики также определяются в dbgmetric.lib.

Примечание.

TextInterpreter — это базовый механизм отладки; он не настраивается (и поэтому не регистрируется) каких-либо других функций. Более полный механизм отладки будет иметь целый список вызовов SetMetric или их эквивалент, по одному для каждой функции, которую поддерживает модуль отладки.

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