Aracılığıyla paylaş


Özel hata ayıklama motorunu kaydetme

Hata ayıklama altyapısının, COM kurallarını izleyerek kendisini sınıf fabrikası olarak kaydetmesi ve Visual Studio kayıt defteri alt anahtarı aracılığıyla Visual Studio'ya kaydolması gerekir.

Uyarı

Öğretici: ATL COM kullanarak hata ayıklama altyapısı oluşturma'nın bir parçası olarak oluşturulan TextInterpreter örneğinde hata ayıklama altyapısının nasıl kaydedildiğiyle ilgili bir örnek bulabilirsiniz.

DLL sunucusu işlemi

Hata ayıklama altyapısı genellikle kendi DLL'sinde COM sunucusu olarak ayarlanır. Bu nedenle, Visual Studio'nun erişebilmesi için önce hata ayıklama altyapısının sınıf fabrikasının CLSID'sini COM'a kaydetmesi gerekir. Ardından, hata ayıklama altyapısının desteklediği özellikleri (ölçümler olarak da bilinir) oluşturmak için hata ayıklama altyapısının kendisini Visual Studio'ya kaydetmesi gerekir. Visual Studio kayıt defteri alt anahtarına yazılan ölçümlerin seçimi, hata ayıklama altyapısının desteklediği özelliklere bağlıdır.

Hata ayıklamaya yönelik SDK yardımcıları yalnızca bir hata ayıklama altyapısını kaydetmek için gereken kayıt defteri konumlarını açıklamaz; Ayrıca, kayıt defterini düzenlemeyi kolaylaştıran C++ geliştiricileri için bir dizi yararlı işlev ve bildirim içeren dbgmetric.lib kitaplığını da açıklar.

Example

Aşağıdaki örnekte (TextInterpreter örneğinde), Visual Studio'ya bir hata ayıklama altyapısı kaydetmek için işlevinin SetMetric nasıl kullanılacağı ( dbgmetric.lib'den) gösterilmektedir. Geçirilen ölçümler dbgmetric.lib dosyasında da tanımlanır.

Uyarı

TextInterpreter temel bir hata ayıklama altyapısıdır; diğer özellikleri ayarlamaz ve bu nedenle kaydedilmez. Daha eksiksiz bir hata ayıklama motoru, hata ayıklama motorunun desteklediği her özellik için tam bir çağrı listesi veya eşdeğeri içerebilir.

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