Aracılığıyla paylaş


Hata Ayıklama için SDK Yardımcıları

Bu işlevler ve bildirimler C++ içinde hata ayıklama altyapılarını, ifade değerlendiricilerini ve sembol sağlayıcılarını uygulamaya yönelik genel yardımcı işlevlerdir.

Dekont

Şu anda bu işlevlerin ve bildirimlerin yönetilen sürümleri yoktur.

Hata ayıklama altyapıları, ifade değerlendiricileri ve sembol sağlayıcılarının Visual Studio tarafından kullanılabilmesi için bunların kaydedilmesi gerekir. Bu, kayıt defteri alt anahtarlarını ve girdilerini ayarlayarak yapılır; aksi takdirde "ölçümleri ayarlama" olarak bilinir. Aşağıdaki genel işlevler, bu ölçümleri güncelleştirme sürecini kolaylaştırmak için tasarlanmıştır. Bu işlevler tarafından güncelleştirilen her kayıt defteri alt anahtarının düzenini öğrenmek için Kayıt Defteri Konumları bölümüne bakın.

Genel Ölçüm İşlevleri

Bunlar, hata ayıklama altyapıları tarafından kullanılan genel işlevlerdir. İfade değerlendiricileri ve sembol sağlayıcıları için özel işlevler daha sonra ayrıntılı olarak anlatılır.

GetMetric Yöntemi

Kayıt defterinden bir ölçüm değeri alır.

HRESULT GetMetric(
   LPCWSTR pszMachine,
   LPCWSTR pszType,
   REFGUID guidSection,
   LPCWSTR pszMetric,
   DWORD * pdwValue,
   LPCWSTR pszAltRoot
);
Parametre Açıklama
pszMachine [in] Yazmaç yazılacak olan uzak bir makinenin adı (NULL yerel makine anlamına gelir).
pszType [in] Ölçüm türlerinden biri.
guidSection [in] Belirli bir altyapının, değerlendiricinin, özel durumun vb. GUID'i. Bu, belirli bir öğe için ölçüm türü altındaki bir alt bölümü belirtir.
pszMetric [in] Elde edilecek ölçüm. Bu, belirli bir değer adına karşılık gelir.
pdwValue [in] Ölçümdeki değerin depolama konumu. GetMetric'in DWORD (bu örnekte olduğu gibi), BSTR, GUID veya GUID dizisi döndürebilen çeşitli özellikleri vardır.
pszAltRoot [in] Kullanılacak alternatif kayıt defteri kökü. NULL Varsayılanı kullanmak için olarak ayarlayın.

SetMetric Yöntemi

Kayıt defterinde belirtilen ölçüm değerini ayarlar.

HRESULT SetMetric(
         LPCWSTR pszType,
         REFGUID guidSection,
         LPCWSTR pszMetric,
   const DWORD   dwValue,
         bool    fUserSpecific,
         LPCWSTR pszAltRoot
);
Parametre Açıklama
pszType [in] Ölçüm türlerinden biri.
guidSection [in] Belirli bir altyapının, değerlendiricinin, özel durumun vb. GUID'i. Bu, belirli bir öğe için ölçüm türü altındaki bir alt bölümü belirtir.
pszMetric [in] Elde edilecek ölçüm. Bu, belirli bir değer adına karşılık gelir.
dwValue [in] Ölçümdeki değerin depolama konumu. Bir DWORD (bu örnekte), BSTR, GUID veya guid dizisini depolayan çeşitli SetMetric türleri vardır.
fUserSpecific [in] Ölçüm kullanıcıya özgüyse ve yerel makine kovanı yerine kullanıcının kovanına yazılması gerekiyorsa TRUE.
pszAltRoot [in] Kullanılacak alternatif kayıt defteri kökü. NULL Varsayılanı kullanmak için olarak ayarlayın.

RemoveMetric Yöntemi

Belirtilen ölçümü kayıt defterinden kaldırır.

HRESULT RemoveMetric(
   LPCWSTR pszType,
   REFGUID guidSection,
   LPCWSTR pszMetric,
   LPCWSTR pszAltRoot
);
Parametre Açıklama
pszType [in] Ölçüm türlerinden biri.
guidSection [in] Belirli bir altyapının, değerlendiricinin, özel durumun vb. GUID'i. Bu, belirli bir öğe için ölçüm türü altındaki bir alt bölümü belirtir.
pszMetric [in] Kaldırılacak ölçüm. Bu, belirli bir değer adına karşılık gelir.
pszAltRoot [in] Kullanılacak alternatif kayıt defteri kökü. NULL Varsayılanı kullanmak için olarak ayarlayın.

EnumMetricSections Yöntemi

Kayıt defterindeki çeşitli ölçüm bölümlerini numaralandırır.

HRESULT EnumMetricSections(
   LPCWSTR pszMachine,
   LPCWSTR pszType,
   GUID *  rgguidSections,
   DWORD * pdwSize,
   LPCWSTR pszAltRoot
);
Parametre Açıklama
pszMachine [in] Yazmaç yazılacak olan uzak bir makinenin adı (NULL yerel makine anlamına gelir).
pszType [in] Ölçüm türlerinden biri.
rgguidSections [in, out] Doldurulacak önceden ayrılmış GUID dizisi.
pdwSize [in] Dizide rgguidSections depolanabilecek en fazla GUID sayısı.
pszAltRoot [in] Kullanılacak alternatif kayıt defteri kökü. NULL Varsayılanı kullanmak için olarak ayarlayın.

İfade Değerlendirici İşlevleri

İşlev Açıklama
GetEEMetric Kayıt defterinden bir ölçüm değeri alır.
SetEEMetric Kayıt defterinde belirtilen ölçüm değerini ayarlar.
RemoveEEMetric Belirtilen ölçümü kayıt defterinden kaldırır.
GetEEMetricFile Belirtilen ölçümden bir dosya adı alır ve dosya içeriğini dize olarak döndürerek bunu yükler.

Özel Durum İşlevleri

İşlev Açıklama
GetExceptionMetric Kayıt defterinden bir ölçüm değeri alır.
SetExceptionMetric Kayıt defterinde belirtilen ölçüm değerini ayarlar.
RemoveExceptionMetric Belirtilen ölçümü kayıt defterinden kaldırır.
RemoveAllExceptionMetrics Kayıt defterinden tüm özel durum ölçümlerini kaldırır.

Sembol Sağlayıcısı İşlevleri

İşlev Açıklama
GetSPMetric Kayıt defterinden bir ölçüm değeri alır.
SetSPMetric Kayıt defterinde belirtilen ölçüm değerini ayarlar.
RemoveSPMetric Belirtilen ölçümü kayıt defterinden kaldırır.

Numaralandırma İşlevleri

İşlev Açıklama
EnumMetricSections Belirtilen ölçüm türü için tüm ölçümleri numaralandırır.
EnumDebugEngine Kayıtlı hata ayıklama altyapılarını numaralandırır.
EnumEEs Kayıtlı ifade değerlendiricilerini numaralandırır.
EnumExceptionMetrics Tüm özel durum ölçümlerini numaralandırır.

Ölçüm Tanımları

Bu tanımlar önceden tanımlanmış ölçüm adları için kullanılabilir. Adlar çeşitli kayıt defteri anahtarlarına ve değer adlarına karşılık gelir ve tümü geniş karakter dizeleri olarak tanımlanır: örneğin, extern LPCWSTR metrictypeEngine.

Önceden Tanımlanmış Ölçüm Türleri Açıklama: Temel anahtar....
metrictypeEngine Tüm hata ayıklama altyapısı ölçümleri.
metrictypePortSupplier Tüm bağlantı noktası sağlayıcısı ölçümleri.
metrictypeException Tüm özel durum ölçümleri.
metricttypeEEExtension Tüm ifade değerlendirici uzantıları.
Altyapı Özelliklerinde Hata Ayıklama Açıklama
metricAddressBP Adres kesme noktaları desteğini göstermek için sıfır olmayan olarak ayarlayın.
metricAlwaysLoadLocal Hata ayıklama altyapısını her zaman yerel olarak yüklemek için sıfır olmayan olarak ayarlayın.
metricLoadInDebuggeeSession KULLANILMIYOR
metricLoadedByDebuggee Hata ayıklama altyapısının her zaman ile veya hata ayıklanan program tarafından yüklendiğini belirtmek için sıfır olmayan olarak ayarlayın.
metricAttach Mevcut programlara ek desteğini göstermek için sıfır olmayan olarak ayarlayın.
metricCallStackBP Çağrı yığını kesme noktaları desteğini göstermek için sıfır olmayan olarak ayarlayın.
metricConditionalBP Koşullu kesme noktaları ayarının desteğini belirtmek için sıfır olmayan olarak ayarlayın.
metricDataBP Verilerdeki değişikliklerde kesme noktası ayarının desteğini göstermek için sıfır olmayan olarak ayarlayın.
metricDisassembly Ayrıştırılmış döküm üretimine yönelik desteği göstermek için sıfır dışı olarak ayarlayın.
metricDumpWriting Döküm yazma desteğini (bir çıkış cihazına bellek dökümü) göstermek için sıfır dışı olarak ayarlayın.
metricENC Düzenle ve Devam Et desteğini göstermek için sıfır olmayan olarak ayarlayın. Not: Özel bir hata ayıklama altyapısı bunu hiçbir zaman ayarlamamalıdır veya her zaman 0 olarak ayarlamalıdır.
metricExceptions Özel durumlar için desteği göstermek için sıfır olmayan olarak ayarlayın.
metricFunctionBP Adlandırılmış kesme noktaları (belirli bir işlev adı çağrıldığında kesen kesme noktaları) desteğini göstermek için sıfır olmayan olarak ayarlayın.
metricHitCountBP "İsabet noktası" kesme noktalarının (yalnızca belirli bir sayıda çarptıktan sonra tetiklenen kesme noktaları) ayarının desteğini belirtmek için sıfır dışı olarak ayarlayın.
metricJITDebug Tam zamanında hata ayıklama desteğini göstermek için sıfır dışı olarak ayarlayın (çalışan bir işlemde bir özel durum oluştuğunda hata ayıklayıcı başlatılır).
metricMemory KULLANILMIYOR
metricPortSupplier Uygulandıysa bunu bağlantı noktası sağlayıcısının CLSID'sine ayarlayın.
metricRegisters KULLANILMIYOR
metricSetNextStatement Sonraki deyimi ayarlama desteğini göstermek için sıfır olmayan olarak ayarlayın (ara deyimlerin yürütülmesini atlar).
metricSuspendThread İş parçacığı yürütmeyi askıya alma desteğini göstermek için sıfır olmayan olarak ayarlayın.
metricWarnIfNoSymbols Simge yoksa kullanıcıya bildirilmesi gerektiğini belirtmek için sıfır olmayan olarak ayarlayın.
metricProgramProvider Bunu program sağlayıcısının CLSID'sine ayarlayın.
metricAlwaysLoadProgramProviderLocal Program sağlayıcısının her zaman yerel olarak yüklenmesi gerektiğini belirtmek için bunu sıfır olmayan olarak ayarlayın.
metricEngineCanWatchProcess Hata ayıklama altyapısının program sağlayıcısı yerine işlem olaylarını izleyeceğini belirtmek için bunu sıfır olmayan olarak ayarlayın.
metricRemoteDebugging Uzaktan hata ayıklama desteğini göstermek için bunu sıfır olmayan olarak ayarlayın.
metricEncUseNativeBuilder Düzenle ve Devam Et Yöneticisi'nin Düzenle ve Devam Et için derlemek üzere hata ayıklama altyapısının encbuild.dll dosyasını kullanması gerektiğini belirtmek için bunu sıfır olmayan olarak ayarlayın. Not: Özel bir hata ayıklama altyapısı bunu hiçbir zaman ayarlamamalıdır veya her zaman 0 olarak ayarlamalıdır.
metricLoadUnderWOW64 Hata ayıklama altyapısının 64 bitlik bir işlemde hata ayıklarken WOW altındaki hata ayıklama işlemine yüklenmesi gerektiğini belirtmek için bunu sıfır olmayan olarak ayarlayın; aksi takdirde, hata ayıklama altyapısı Visual Studio işlemine yüklenir (WOW64 altında çalışır).
metricLoadProgramProviderUnderWOW64 WOW altında 64 bitlik bir işlemde hata ayıklarken program sağlayıcısının hata ayıklama işlemine yüklenmesi gerektiğini belirtmek için bunu sıfır dışı olarak ayarlayın; aksi takdirde, Visual Studio işleminde yüklenir.
metricStopOnExceptionCrossingManagedBoundary Yönetilen/yönetilmeyen kod sınırları arasında işlenmeyen bir özel durum oluştuğunda işlemin durdurulması gerektiğini belirtmek için bunu sıfır olmayan olarak ayarlayın.
metricAutoSelectPriority Hata ayıklama altyapısının otomatik seçimi için bunu önceliğe ayarlayın (yüksek değerler daha yüksek önceliğe eşittir).
metricAutoSelectIncompatibleList Otomatik seçimde hata ayıklama altyapılarının yoksayılması için GUID'leri belirten girdileri içeren kayıt defteri anahtarı. Bu girdiler, guid değeri dize olarak ifade edilen bir sayıdır (0, 1, 2 vb.).
metricIncompatibleList Bu hata ayıklama altyapısıyla uyumsuz hata ayıklama altyapıları için GUID'leri belirten girdileri içeren kayıt defteri anahtarı.
metricDisableJITOptimization Hata ayıklama sırasında tam zamanında iyileştirmelerin (yönetilen kod için) devre dışı bırakılması gerektiğini belirtmek için bunu sıfır olmayan olarak ayarlayın.
İfade Değerlendirici Özellikleri Açıklama
metricEngine Bu, belirtilen ifade değerlendiricisini destekleyen hata ayıklama altyapılarının sayısını tutar.
metricPreloadModules Bir programda bir ifade değerlendirici başlatıldığında modüllerin önceden yüklenmesi gerektiğini belirtmek için bunu sıfır olmayan olarak ayarlayın.
metricThisObjectName Bunu "bu" nesne adı olarak ayarlayın.
İfade Değerlendirici Uzantısı Özellikleri Açıklama
metricExtensionDll Bu uzantıyı destekleyen dll'nin adı.
metricExtensionRegistersSupported Desteklenen yazmaçların listesi.
metricExtensionRegistersEntryPoint Yazmaçlara erişmek için giriş noktası.
metricExtensionTypesSupported Desteklenen türlerin listesi.
metricExtensionTypesEntryPoint Türlere erişmek için giriş noktası.
Bağlantı Noktası Sağlayıcısı Özellikleri Açıklama
metricPortPickerCLSID Bağlantı noktası seçicinin CLSID değeri (kullanıcının bağlantı noktalarını seçmek ve hata ayıklama için kullanılacak bağlantı noktaları eklemek için kullanabileceği bir iletişim kutusu).
metricDisallowUserEnteredPorts Kullanıcı tarafından girilen bağlantı noktaları bağlantı noktası sağlayıcısına eklenemiyorsa sıfır olmayan (bu, bağlantı noktası seçici iletişim kutusunu temelde salt okunur yapar).
metricPidBase İşlem kimliklerini ayırırken bağlantı noktası sağlayıcısı tarafından kullanılan temel işlem kimliği.
Önceden Tanımlanmış SP Deposu Türleri Açıklama
storetypeFile Simgeler ayrı bir dosyada depolanır.
storetypeMetadata Simgeler bir derlemede meta veri olarak depolanır.
Çeşitli Özellikler Açıklama
metricShowNonUserCode Bunu, kullanıcı olmayan kodu gösterecek şekilde sıfır olmayan olarak ayarlayın.
metricJustMyCodeStepping Adımlamanın yalnızca kullanıcı kodunda gerçekleşebileceğini belirtmek için bunu sıfır olmayan olarak ayarlayın.
metricCLSID Belirli bir ölçüm türüne sahip bir nesne için CLSID.
metricName Belirli bir ölçüm türündeki bir nesne için kullanıcı dostu ad.
metricLanguage Dil adı.

Kayıt Defteri Konumları

Ölçümler kayıt defterinden okunur ve özellikle alt anahtarda VisualStudio yazılır.

Dekont

Çoğu zaman ölçümler HKEY_LOCAL_MACHINE anahtarına yazılır. Ancak, bazen HKEY_CURRENT_USER hedef anahtar olur. Dbgmetric.lib her iki anahtarı da işler. Ölçüm alırken önce HKEY_CURRENT_USER, ardından HKEY_LOCAL_MACHINE arar. Bir ölçümü ayarlarken, parametre hangi üst düzey anahtarın kullanılacağını belirtir.

[kayıt defteri anahtarı]\

Software\

Microsoft\

VisualStudio\

[sürüm kökü]\

[ölçüm kökü]\

[ölçüm türü]\

[ölçüm] = [ölçüm değeri]

[ölçüm] = [ölçüm değeri]

[ölçüm] = [ölçüm değeri]

Yer tutucu Açıklama
[kayıt defteri anahtarı] HKEY_CURRENT_USER veya HKEY_LOCAL_MACHINE.
[sürüm kökü] Visual Studio sürümü (örneğin, 7.0, 7.1veya 8.0). Ancak bu kök, devenv.exe'ye /rootsuffix anahtarı kullanılarak da değiştirilebilir. VSIP için bu değiştirici genellikle Exp olduğundan sürüm kökü 8.0Exp olabilir.
[ölçüm kökü] Bu, AD7Metrics dbgmetric.lib hata ayıklama sürümünün kullanılıp kullanılmadığına bağlı olarak veya AD7Metrics(Debug)şeklindedir. Not: dbgmetric.lib kullanılıp kullanılmadığı, hata ayıklama ve sürüm sürümleri arasında kayıt defterine yansıtılması gereken farklılıklar varsa bu adlandırma kuralına uyulmalıdır.
[ölçüm türü] Yazılacak ölçüm türü: Engine, ExpressionEvaluator, SymbolProvider, vb. Bunların tümü dbgmetric.h dosyasında olarak metricTypeXXXXtanımlanır; burada XXXX belirli bir tür adıdır.
[ölçüm] Ölçümü ayarlamak için bir değer atanacak girdinin adı. Ölçümlerin gerçek organizasyonu ölçüm türüne bağlıdır.
[ölçüm değeri] Ölçüme atanan değer. Değerin sahip olması gereken tür (dize, sayı vb.) ölçüme bağlıdır.

Dekont

Tüm GUID'ler biçiminde {GUID}depolanır. Örneğin, {123D150B-FA18-461C-B218-45B3E4589F9B}.

Altyapılarda Hata Ayıklama

Aşağıda, kayıt defterindeki hata ayıklama altyapıları ölçümlerinin organizasyonu yer alır. Enginehata ayıklama altyapısının ölçüm türü adıdır ve yukarıdaki kayıt defteri alt ağacındaki [ölçüm türü] öğesine karşılık gelir.

Engine\

[altyapı guid]\

CLSID = [sınıf guid]

[ölçüm] = [ölçüm değeri]

[ölçüm] = [ölçüm değeri]

[ölçüm] = [ölçüm değeri]

PortSupplier\

0 = [bağlantı noktası sağlayıcısı guid]

1 = [bağlantı noktası sağlayıcısı guid]

Yer tutucu Açıklama
[altyapı guid] Hata ayıklama altyapısının GUID'i.
[sınıf guid] Bu hata ayıklama altyapısını uygulayan sınıfın GUID'i.
[bağlantı noktası sağlayıcısı guid] Varsa, bağlantı noktası sağlayıcısının GUID değeri. Çoğu hata ayıklama altyapısı varsayılan bağlantı noktası sağlayıcısını kullanır ve bu nedenle kendi sağlayıcılarını belirtmez. Bu durumda alt anahtar PortSupplier yoktur.

Bağlantı Noktası Sağlayıcıları

Aşağıda, kayıt defterindeki bağlantı noktası sağlayıcısı ölçümlerinin organizasyonu yer alır. PortSupplierbir bağlantı noktası sağlayıcısının ölçüm türü adıdır ve [ölçüm türü] öğesine karşılık gelir.

PortSupplier\

[bağlantı noktası sağlayıcısı guid]\

CLSID = [sınıf guid]

[ölçüm] = [ölçüm değeri]

[ölçüm] = [ölçüm değeri]

Yer tutucu Açıklama
[bağlantı noktası sağlayıcısı guid] Bağlantı noktası sağlayıcısının GUID'i
[sınıf guid] Bu bağlantı noktası sağlayıcısını uygulayan sınıfın GUID'i

Sembol Sağlayıcıları

Aşağıda, kayıt defterindeki sembol sağlayıcısı ölçümlerinin organizasyonu yer alır. SymbolProvidersembol sağlayıcısının ölçüm türü adıdır ve [ölçüm türü] öğesine karşılık gelir.

SymbolProvider\

[sembol sağlayıcısı guid]\

file\

CLSID = [sınıf guid]

[ölçüm] = [ölçüm değeri]

[ölçüm] = [ölçüm değeri]

metadata\

CLSID = [sınıf guid]

[ölçüm] = [ölçüm değeri]

[ölçüm] = [ölçüm değeri]

Yer tutucu Açıklama
[sembol sağlayıcısı guid] Sembol sağlayıcısının GUID'i
[sınıf guid] Bu sembol sağlayıcısını uygulayan sınıfın GUID'i

İfade Değerlendiricileri

Aşağıda, kayıt defterindeki ifade değerlendirici ölçümlerinin organizasyonu yer alır. ExpressionEvaluatorifade değerlendiricisinin ölçüm türü adıdır ve [ölçüm türü] öğesine karşılık gelir.

Dekont

İfade değerlendiricileri için ExpressionEvaluator tüm ölçüm değişikliklerinin uygun ifade değerlendirici ölçüm işlevlerinden geçeceği varsayıldığından için ölçüm türü dbgmetric.h içinde tanımlanmaz (alt anahtarın ExpressionEvaluator düzeni biraz karmaşık olduğundan ayrıntılar dbgmetric.lib içinde gizlenir).

ExpressionEvaluator\

[dil guid]\

[satıcı guid]\

CLSID = [sınıf guid]

[ölçüm] = [ölçüm değeri]

[ölçüm] = [ölçüm değeri]

Engine\

0 = [debug engine guid]

1 = [debug engine guid]

Yer tutucu Açıklama
[dil guid] Bir dilin GUID'i
[satıcı guid] Satıcının GUID değeri
[sınıf guid] Bu ifade değerlendiricisini uygulayan sınıfın GUID'i
[debug engine guid] Bu ifade değerlendiricinin çalıştığı bir hata ayıklama altyapısının GUID'i

İfade Değerlendirici Uzantıları

Aşağıda, kayıt defterindeki ifade değerlendirici uzantısı ölçümlerinin organizasyonu yer alır. EEExtensionsifade değerlendirici uzantılarının ölçüm türü adıdır ve [ölçüm türü] öğesine karşılık gelir.

EEExtensions\

[uzantı guid]\

[ölçüm] = [ölçüm değeri]

[ölçüm] = [ölçüm değeri]

Yer tutucu Açıklama
[uzantı guid] İfade değerlendirici uzantısının GUID'i

Özel durumlar

Aşağıda, kayıt defterindeki özel durum ölçümlerinin organizasyonu yer alır. Exception, özel durumların ölçüm türü adıdır ve [ölçüm türü] öğesine karşılık gelir.

Exception\

[debug engine guid]\

[özel durum türleri]\

[özel durum]\

[ölçüm] = [ölçüm değeri]

[ölçüm] = [ölçüm değeri]

[özel durum]\

[ölçüm] = [ölçüm değeri]

[ölçüm] = [ölçüm değeri]

Yer tutucu Açıklama
[debug engine guid] Özel durumları destekleyen bir hata ayıklama altyapısının GUID'i.
[özel durum türleri] İşlenebilir özel durum sınıfını tanımlayan alt anahtar için genel bir başlık. Tipik adlar C++ Özel Durumları, Win32 Özel Durumları, Ortak Dil Çalışma Zamanı Özel Durumları ve Yerel Çalışma Zamanı Denetimleridir. Bu adlar, kullanıcıya belirli bir özel durum sınıfını tanımlamak için de kullanılır.
[özel durum] Özel durum için bir ad: örneğin, _com_error veya Control-Break. Bu adlar, kullanıcı için belirli bir özel durumu tanımlamak için de kullanılır.

Gereksinimler

Bu dosyalar Microsoft Visual Studio 2010 SDK yükleme dizininde bulunur (varsayılan olarak, [sürücü]\Program Files\Microsoft Visual Studio 2010 SDK\).

Üst bilgi: includes\dbgmetric.h

Kitaplık: libs\ad2de.lib, libs\dbgmetric.lib

Ayrıca bkz.