Bagikan melalui


Bantuan SDK untuk Penelusuran Kesalahan

Fungsi dan deklarasi ini adalah fungsi pembantu global untuk menerapkan mesin debug, evaluator ekspresi, dan penyedia simbol di C++.

Catatan

Tidak ada versi terkelola dari fungsi dan deklarasi ini saat ini.

Agar mesin debug, evaluator ekspresi, dan penyedia simbol digunakan oleh Visual Studio, mereka harus didaftarkan. Ini dilakukan dengan mengatur subkuntang dan entri registri, atau dikenal sebagai "mengatur metrik." Fungsi global berikut dirancang untuk memudahkan proses pembaruan metrik ini. Lihat bagian tentang Lokasi Registri untuk mengetahui tata letak setiap subkuntang registri yang diperbarui oleh fungsi-fungsi ini.

Fungsi Metrik Umum

Ini adalah fungsi umum yang digunakan oleh mesin debug. Fungsi khusus untuk evaluator ekspresi dan penyedia simbol dirinci nanti.

Metode GetMetric

Mengambil nilai metrik dari registri.

HRESULT GetMetric(
   LPCWSTR pszMachine,
   LPCWSTR pszType,
   REFGUID guidSection,
   LPCWSTR pszMetric,
   DWORD * pdwValue,
   LPCWSTR pszAltRoot
);
Parameter Deskripsi
pszMachine [di] Nama mesin jarak jauh yang register-nya akan ditulis (NULL berarti komputer lokal).
pszType [di] Salah satu jenis metrik.
guidSection [di] GUID mesin, evaluator, pengecualian, dll. Ini menentukan sub bagian di bawah jenis metrik untuk elemen tertentu.
pszMetric [di] Metrik yang akan diperoleh. Ini sesuai dengan nama nilai tertentu.
pdwValue [di] Lokasi penyimpanan nilai dari metrik. Ada beberapa rasa GetMetric yang dapat mengembalikan DWORD (seperti dalam contoh ini), BSTR, GUID, atau array GUID.
pszAltRoot [di] Akar registri alternatif untuk digunakan. Atur ke NULL untuk menggunakan default.

Metode SetMetric

Mengatur nilai metrik yang ditentukan dalam registri.

HRESULT SetMetric(
         LPCWSTR pszType,
         REFGUID guidSection,
         LPCWSTR pszMetric,
   const DWORD   dwValue,
         bool    fUserSpecific,
         LPCWSTR pszAltRoot
);
Parameter Deskripsi
pszType [di] Salah satu jenis metrik.
guidSection [di] GUID mesin, evaluator, pengecualian, dll. Ini menentukan sub bagian di bawah jenis metrik untuk elemen tertentu.
pszMetric [di] Metrik yang akan diperoleh. Ini sesuai dengan nama nilai tertentu.
dwValue [di] Lokasi penyimpanan nilai dalam metrik. Ada beberapa rasa SetMetric yang dapat menyimpan DWORD (dalam contoh ini), BSTR, GUID, atau array GUID.
fUserSpecific [di] TRUE jika metrik spesifik pengguna dan jika harus ditulis ke sarang pengguna alih-alih sarang komputer lokal.
pszAltRoot [di] Akar registri alternatif untuk digunakan. Atur ke NULL untuk menggunakan default.

Metode RemoveMetric

Menghapus metrik yang ditentukan dari registri.

HRESULT RemoveMetric(
   LPCWSTR pszType,
   REFGUID guidSection,
   LPCWSTR pszMetric,
   LPCWSTR pszAltRoot
);
Parameter Deskripsi
pszType [di] Salah satu jenis metrik.
guidSection [di] GUID mesin, evaluator, pengecualian, dll. Ini menentukan sub bagian di bawah jenis metrik untuk elemen tertentu.
pszMetric [di] Metrik yang akan dihapus. Ini sesuai dengan nama nilai tertentu.
pszAltRoot [di] Akar registri alternatif untuk digunakan. Atur ke NULL untuk menggunakan default.

Metode EnumMetricSections

Menghitung berbagai bagian metrik dalam registri.

HRESULT EnumMetricSections(
   LPCWSTR pszMachine,
   LPCWSTR pszType,
   GUID *  rgguidSections,
   DWORD * pdwSize,
   LPCWSTR pszAltRoot
);
Parameter Deskripsi
pszMachine [di] Nama mesin jarak jauh yang register-nya akan ditulis (NULL berarti komputer lokal).
pszType [di] Salah satu jenis metrik.
rgguidSections [masuk, keluar] Array GUID yang telah dialokasikan sebelumnya untuk diisi.
pdwSize [di] Jumlah maksimum GUID yang dapat disimpan dalam rgguidSections array.
pszAltRoot [di] Akar registri alternatif untuk digunakan. Atur ke NULL untuk menggunakan default.

Fungsi Evaluator Ekspresi

Function Deskripsi
GetEEMetric Mengambil nilai metrik dari registri.
SetEEMetric Mengatur nilai metrik yang ditentukan dalam registri.
RemoveEEMetric Menghapus metrik yang ditentukan dari registri.
GetEEMetricFile Mendapatkan nama file dari metrik yang ditentukan dan memuatnya, mengembalikan konten file sebagai string.

Fungsi Pengecualian

Function Deskripsi
GetExceptionMetric Mengambil nilai metrik dari registri.
SetExceptionMetric Mengatur nilai metrik yang ditentukan dalam registri.
RemoveExceptionMetric Menghapus metrik yang ditentukan dari registri.
RemoveAllExceptionMetrics Menghapus semua metrik pengecualian dari registri.

Fungsi Penyedia Simbol

Function Deskripsi
GetSPMetric Mengambil nilai metrik dari registri.
SetSPMetric Mengatur nilai metrik yang ditentukan dalam registri.
RemoveSPMetric Menghapus metrik yang ditentukan dari registri.

Fungsi Enumerasi

Function Deskripsi
EnumMetricSections Menghitung semua metrik untuk jenis metrik tertentu.
EnumDebugEngine Menghitung mesin debug terdaftar.
EnumEEs Menghitung evaluator ekspresi terdaftar.
EnumExceptionMetrics Menghitung semua metrik pengecualian.

Definisi Metrik

Definisi ini dapat digunakan untuk nama metrik yang telah ditentukan sebelumnya. Nama sesuai dengan berbagai kunci registri dan nama nilai dan semuanya didefinisikan sebagai string karakter lebar: misalnya, extern LPCWSTR metrictypeEngine.

Jenis Metrik yang Telah Ditentukan Sebelumnya Deskripsi: Kunci dasar untuk....
metriktypeEngine Semua metrik mesin debug.
metrictypePortSupplier Semua metrik pemasok port.
metrictypeException Semua metrik pengecualian.
metricttypeEEExtension Semua ekstensi evaluator ekspresi.
Properti Mesin Debug Deskripsi
metricAddressBP Atur ke nonzero untuk menunjukkan dukungan untuk titik henti alamat.
metricAlwaysLoadLocal Atur ke nonzero untuk selalu memuat mesin debug secara lokal.
metricLoadInDebuggeeSession TIDAK DIGUNAKAN
metricLoadedByDebuggee Atur ke nonzero untuk menunjukkan bahwa mesin debug akan selalu dimuat dengan atau oleh program yang sedang di-debug.
metrikAttach Atur ke nonzero untuk menunjukkan dukungan untuk lampiran ke program yang ada.
metricCallStackBP Atur ke nonzero untuk menunjukkan dukungan untuk titik henti tumpukan panggilan.
metricConditionalBP Atur ke nonzero untuk menunjukkan dukungan untuk pengaturan titik henti kondisi.
metricDataBP Atur ke nonzero untuk menunjukkan dukungan untuk pengaturan titik henti pada perubahan data.
metricDisassembly Atur ke nonzero untuk menunjukkan dukungan untuk produksi daftar pembongkaran.
metricDumpWriting Atur ke nonzero untuk menunjukkan dukungan untuk penulisan cadangan (pembuangan memori ke perangkat output).
metricENC Atur ke nonzero untuk menunjukkan dukungan untuk Edit dan Lanjutkan. Catatan: Mesin debug kustom tidak boleh mengatur ini atau harus selalu mengaturnya ke 0.
metricExceptions Atur ke nonzero untuk menunjukkan dukungan untuk pengecualian.
metricFunctionBP Atur ke nonzero untuk menunjukkan dukungan untuk titik henti bernama (titik henti yang putus saat nama fungsi tertentu dipanggil).
metricHitCountBP Atur ke nonzero untuk menunjukkan dukungan untuk pengaturan titik henti "titik temuan" (titik henti yang dipicu hanya setelah mencapai beberapa kali).
metricJITDebug Atur ke nonzero untuk menunjukkan dukungan untuk penelusuran kesalahan just-in-time (debugger diluncurkan saat pengecualian terjadi dalam proses yang sedang berjalan).
metricMemory TIDAK DIGUNAKAN
metricPortSupplier Atur ini ke CLSID pemasok port jika diimplementasikan.
metricRegisters TIDAK DIGUNAKAN
metricSetNextStatement Atur ke nonzero untuk menunjukkan dukungan untuk mengatur pernyataan berikutnya (yang melewati eksekusi pernyataan perantara).
metricSuspendThread Atur ke nonzero untuk menunjukkan dukungan untuk menangguhkan eksekusi utas.
metricWarnIfNoSymbols Atur ke nonzero untuk menunjukkan bahwa pengguna harus diberi tahu jika tidak ada simbol.
metricProgramProvider Atur ini ke CLSID penyedia program.
metricAlwaysLoadProgramProviderLocal Atur ini ke nonzero untuk menunjukkan bahwa penyedia program harus selalu dimuat secara lokal.
metricEngineCanWatchProcess Atur ini ke nonzero untuk menunjukkan bahwa mesin debug akan menonton peristiwa proses alih-alih penyedia program.
metricRemoteDebugging Atur ini ke nonzero untuk menunjukkan dukungan untuk penelusuran kesalahan jarak jauh.
metricEncUseNativeBuilder Atur ini ke nonzero untuk menunjukkan bahwa Edit dan Lanjutkan Manager harus menggunakan encbuild.dll mesin debug untuk dibangun untuk Edit dan Lanjutkan. Catatan: Mesin debug kustom tidak boleh mengatur ini atau harus selalu mengaturnya ke 0.
metricLoadUnderWOW64 Atur ini ke nonzero untuk menunjukkan bahwa mesin debug harus dimuat dalam proses debuggee di bawah WOW saat men-debug proses 64-bit; jika tidak, mesin debug akan dimuat dalam proses Visual Studio (yang berjalan di bawah WOW64).
metricLoadProgramProviderUnderWOW64 Atur ini ke nonzero untuk menunjukkan bahwa penyedia program harus dimuat dalam proses debuggee saat men-debug proses 64-bit di bawah WOW; jika tidak, itu akan dimuat dalam proses Visual Studio.
metrikStopOnExceptionCrossingManagedBoundary Atur ini ke nonzero untuk menunjukkan bahwa proses harus berhenti jika pengecualian yang tidak tertangani dilemparkan ke seluruh batas kode terkelola/tidak terkelola.
metricAutoSelectPriority Atur ini ke prioritas untuk pemilihan otomatis mesin debug (nilai yang lebih tinggi sama dengan prioritas yang lebih tinggi).
metricAutoSelectIncompatibleList Kunci registri yang berisi entri yang menentukan GUID untuk mesin debug yang akan diabaikan dalam pilihan otomatis. Entri ini adalah angka (0, 1, 2, dan sebagainya) dengan GUID yang dinyatakan sebagai string.
metricIncompatibleList Kunci registri yang berisi entri yang menentukan GUID untuk mesin debug yang tidak kompatibel dengan mesin debug ini.
metricDisableJITOptimization Atur ini ke nonzero untuk menunjukkan bahwa pengoptimalan just-in-time (untuk kode terkelola) harus dinonaktifkan selama penelusuran kesalahan.
Properti Evaluator Ekspresi Deskripsi
metricEngine Ini menyimpan jumlah mesin debug yang mendukung evaluator ekspresi yang ditentukan.
metricPreloadModules Atur ini ke nonzero untuk menunjukkan bahwa modul harus dimuat sebelumnya saat evaluator ekspresi diluncurkan terhadap program.
metricThisObjectName Atur ini ke nama objek "ini".
Properti Ekstensi Evaluator Ekspresi Deskripsi
metricExtensionDll Nama dll yang mendukung ekstensi ini.
metricExtensionRegistersSupported Daftar register yang didukung.
metricExtensionRegistersEntryPoint Titik masuk untuk mengakses register.
metricExtensionTypesSupported Daftar jenis yang didukung.
metricExtensionTypesEntryPoint Titik masuk untuk mengakses jenis.
Properti Pemasok Port Deskripsi
metricPortPickerCLSID CLSID pemilih port (kotak dialog yang dapat digunakan pengguna untuk memilih port dan menambahkan port yang akan digunakan untuk penelusuran kesalahan).
metricDisallowUserEnteredPorts Bukan nol jika port yang dimasukkan pengguna tidak dapat ditambahkan ke pemasok port (ini membuat kotak dialog pemilih port pada dasarnya baca-saja).
metricPidBase ID proses dasar yang digunakan oleh pemasok port saat mengalokasikan ID proses.
Jenis Penyimpanan SP yang telah ditentukan sebelumnya Deskripsi
storetypeFile Simbol disimpan dalam file terpisah.
storetypeMetadata Simbol disimpan sebagai metadata dalam rakitan.
Properti Lain-lain Deskripsi
metricShowNonUserCode Atur ini ke nonzero untuk menampilkan kode nonpengguna.
metricJustMyCodeStepping Atur ini ke nonzero untuk menunjukkan bahwa langkah hanya dapat terjadi dalam kode pengguna.
metricCLSID CLSID untuk objek dari jenis metrik tertentu.
metricName Nama yang mudah digunakan untuk objek dari jenis metrik tertentu.
metricLanguage Nama bahasa.

Lokasi Registri

Metrik dibaca dari dan ditulis ke registri, khususnya VisualStudio di subkunia.

Catatan

Sebagian besar waktu, metrik akan ditulis ke kunci HKEY_LOCAL_MACHINE. Namun, terkadang HKEY_CURRENT_USER akan menjadi kunci tujuan. Dbgmetric.lib menangani kedua kunci. Saat mendapatkan metrik, metrik mencari HKEY_CURRENT_USER terlebih dahulu, lalu HKEY_LOCAL_MACHINE. Saat mengatur metrik, parameter menentukan kunci tingkat atas mana yang akan digunakan.

[kunci registri]\

Software\

Microsoft\

VisualStudio\

[versi root]\

[akar metrik]\

[jenis metrik]\

[metrik] = [nilai metrik]

[metrik] = [nilai metrik]

[metrik] = [nilai metrik]

Placeholder Deskripsi
[kunci registri] HKEY_CURRENT_USER atau HKEY_LOCAL_MACHINE.
[versi root] Versi Visual Studio (misalnya, , 7.0, 7.1atau 8.0). Namun, root ini juga dapat dimodifikasi menggunakan sakelar /rootsuffix ke devenv.exe. Untuk VSIP, pengubah ini biasanya Exp, sehingga root versinya adalah, misalnya, 8.0Exp.
[akar metrik] Ini adalah AD7Metrics atau AD7Metrics(Debug), tergantung pada apakah versi debug dbgmetric.lib digunakan. Catatan: Apakah dbgmetric.lib digunakan atau tidak, konvensi penamaan ini harus dipatuhi jika Anda memiliki perbedaan antara versi debug dan rilis yang harus tercermin dalam registri.
[jenis metrik] Jenis metrik yang akan ditulis: Engine, , ExpressionEvaluatorSymbolProvider, dll. Ini semua didefinisikan sebagai dalam dbgmetric.h sebagai metricTypeXXXX, di mana XXXX adalah nama jenis tertentu.
[metrik] Nama entri yang akan ditetapkan nilai untuk mengatur metrik. Organisasi metrik yang sebenarnya tergantung pada jenis metrik.
[nilai metrik] Nilai yang ditetapkan ke metrik. Jenis nilai harus memiliki (string, angka, dll.) tergantung pada metrik.

Catatan

Semua GUID disimpan dalam format {GUID}. Contohnya, {123D150B-FA18-461C-B218-45B3E4589F9B}.

Mesin Debug

Berikut ini adalah organisasi metrik mesin debug dalam registri. Engineadalah nama jenis metrik untuk mesin debug dan sesuai dengan [jenis metrik] dalam subtree registri di atas.

Engine\

[panduan mesin]\

CLSID = [guid kelas]

[metrik] = [nilai metrik]

[metrik] = [nilai metrik]

[metrik] = [nilai metrik]

PortSupplier\

0 = [port supplier guid]

1 = [port supplier guid]

Placeholder Deskripsi
[panduan mesin] GUID mesin debug.
[guid kelas] GUID kelas yang mengimplementasikan mesin debug ini.
[port supplier guid] GUID pemasok port, jika ada. Banyak mesin debug menggunakan pemasok port default dan oleh karena itu tidak menentukan pemasok mereka sendiri. Dalam hal ini, subkuntang PortSupplier akan tidak ada.

Pemasok Port

Berikut ini adalah organisasi metrik pemasok port dalam registri. PortSupplier adalah nama jenis metrik untuk pemasok port dan sesuai dengan [jenis metrik].

PortSupplier\

[port supplier guid]\

CLSID = [guid kelas]

[metrik] = [nilai metrik]

[metrik] = [nilai metrik]

Placeholder Deskripsi
[port supplier guid] GUID pemasok port
[guid kelas] GUID kelas yang mengimplementasikan pemasok port ini

Penyedia Simbol

Berikut ini adalah organisasi metrik pemasok simbol dalam registri. SymbolProvider adalah nama jenis metrik untuk penyedia simbol dan sesuai dengan [jenis metrik].

SymbolProvider\

[panduan penyedia simbol]\

file\

CLSID = [guid kelas]

[metrik] = [nilai metrik]

[metrik] = [nilai metrik]

metadata\

CLSID = [guid kelas]

[metrik] = [nilai metrik]

[metrik] = [nilai metrik]

Placeholder Deskripsi
[panduan penyedia simbol] GUID penyedia simbol
[guid kelas] GUID kelas yang mengimplementasikan penyedia simbol ini

Evaluator Ekspresi

Berikut ini adalah organisasi metrik evaluator ekspresi dalam registri. ExpressionEvaluator adalah nama jenis metrik untuk evaluator ekspresi dan sesuai dengan [jenis metrik].

Catatan

Jenis metrik untuk ExpressionEvaluator tidak didefinisikan dalam dbgmetric.h, karena diasumsikan bahwa semua perubahan metrik untuk evaluator ekspresi akan melalui fungsi metrik evaluator ekspresi yang sesuai (tata letak ExpressionEvaluator subkunci agak rumit, sehingga detailnya tersembunyi di dalam dbgmetric.lib).

ExpressionEvaluator\

[panduan bahasa]\

[pemandu vendor]\

CLSID = [guid kelas]

[metrik] = [nilai metrik]

[metrik] = [nilai metrik]

Engine\

0 = [panduan mesin debug]

1 = [panduan mesin debug]

Placeholder Deskripsi
[panduan bahasa] GUID bahasa
[pemandu vendor] GUID vendor
[guid kelas] GUID kelas yang mengimplementasikan evaluator ekspresi ini
[panduan mesin debug] GUID mesin debug yang bekerja dengan evaluator ekspresi ini

Ekstensi Evaluator Ekspresi

Berikut ini adalah organisasi metrik ekstensi evaluator ekspresi dalam registri. EEExtensions adalah nama jenis metrik untuk ekstensi evaluator ekspresi dan sesuai dengan [jenis metrik].

EEExtensions\

[panduan ekstensi]\

[metrik] = [nilai metrik]

[metrik] = [nilai metrik]

Placeholder Deskripsi
[panduan ekstensi] GUID ekstensi evaluator ekspresi

Pengecualian

Berikut ini adalah organisasi metrik pengecualian dalam registri. Exception adalah nama jenis metrik untuk pengecualian dan sesuai dengan [jenis metrik].

Exception\

[panduan mesin debug]\

[jenis pengecualian]\

[pengecualian]\

[metrik] = [nilai metrik]

[metrik] = [nilai metrik]

[pengecualian]\

[metrik] = [nilai metrik]

[metrik] = [nilai metrik]

Placeholder Deskripsi
[panduan mesin debug] GUID mesin debug yang mendukung pengecualian.
[jenis pengecualian] Judul umum untuk subkunjung yang mengidentifikasi kelas pengecualian yang dapat ditangani. Nama umumnya adalah Pengecualian C++, Pengecualian Win32, Pengecualian Runtime Bahasa Umum, dan Pemeriksaan Run-Time Asli. Nama-nama ini juga digunakan untuk mengidentifikasi kelas pengecualian tertentu kepada pengguna.
[pengecualian] Nama untuk pengecualian: misalnya, _com_error atau Control-Break. Nama-nama ini juga digunakan untuk mengidentifikasi pengecualian tertentu kepada pengguna.

Persyaratan

File-file ini terletak di direktori penginstalan Microsoft Visual Studio 2010 SDK (secara default, [drive]\Program Files\Microsoft Visual Studio 2010 SDK\).

Header: includes\dbgmetric.h

Pustaka: libs\ad2de.lib, libs\dbgmetric.lib

Baca juga