Bagikan melalui


Fungsi Output Debug

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Tangkapan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine dan Audio/Video Capture di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Kelas Dasar DirectShow menyediakan beberapa makro untuk menampilkan informasi penelusuran kesalahan.

Fungsi Deskripsi
DbgCheckModuleLevel Memeriksa apakah pengelogan diaktifkan untuk jenis dan tingkat pesan yang diberikan.
DbgDumpObjectRegister Menampilkan informasi tentang objek aktif.
DbgInitialise Menginisialisasi pustaka debug.
DbgLog Mengirim string ke lokasi output debug, jika pengelogan diaktifkan untuk jenis dan tingkat yang ditentukan.
DbgOutString Mengirim string ke lokasi output debug.
DbgSetModuleLevel Menyetel tingkat pengelogan untuk satu atau beberapa jenis pesan.
DbgTerminate Membersihkan pustaka debug.
DisplayType Mengirim informasi tentang jenis media ke lokasi output debug.
DumpGraph Mengirim informasi tentang grafik filter ke lokasi output debug.
GuidNames Array global yang berisi string yang mewakili GUID yang ditentukan dalam Uuids.h.
NAMA Menghasilkan string khusus debug.
CATATAN Mengirim string ke lokasi output debug.
MENGINGATKAN Menghasilkan pengingat pada waktu kompilasi.

 

Kunci Registri

Fungsi output debug di DirectShow menggunakan sekumpulan kunci registri. Lokasi kunci registri ini tergantung pada versi Windows.

Sebelum Windows Vista, kunci penelusuran kesalahan terletak di bawah jalur berikut:

\ HKEY_LOCAL_MACHINEPERANGKAT LUNAK\Debug

Di Windows Vista atau yang lebih baru, mereka terletak di bawah jalur berikut:

\ HKEY_LOCAL_MACHINEPERANGKAT LUNAK\Microsoft\Directshow\Debug

Untuk filter pihak ketiga, lokasi bergantung pada versi Kelas Dasar DirectShow mana yang digunakan untuk membangun filter. Versi yang disertakan dalam Windows SDK untuk Windows Vista menggunakan jalur yang lebih baru. Versi sebelumnya menggunakan jalur yang lebih lama.

Dalam keterangan berikut, label <DebugRoot> digunakan untuk menunjukkan kedua jalur ini. Ganti jalur yang benar, tergantung pada versi Windows atau versi kelas dasar.

Pengelogan Debug

DirectShow menentukan beberapa jenis pesan, yang diperlihatkan dalam tabel berikut ini.

Nilai Deskripsi
LOG_ERROR Pemberitahuan kesalahan.
LOG_LOCKING Mengunci dan membuka kunci bagian penting.
LOG_MEMORY Alokasi memori, serta pembuatan dan penghancuran objek.
LOG_TIMING Pengukuran waktu dan performa.
LOG_TRACE Pelacakan panggilan umum.
CUSTOM1 hingga CUSTOM5 Tersedia untuk pesan debug kustom

 

Setiap fungsi pengelogan debug DirectShow menentukan jenis pesan dan tingkat log. Pesan debug hanya ditampilkan ketika tingkat penelusuran kesalahan saat ini untuk jenis pesan tersebut sama dengan atau lebih besar dari tingkat yang ditentukan dalam fungsi pengelogan. Jika tidak, pesan diabaikan.

Misalnya, kode berikut menghasilkan string "Ini adalah pesan debug" jika tingkat LOG_TRACE adalah 3 atau lebih tinggi:

DbgLog((LOG_TRACE, 3, TEXT("This is a debug message")));

Setiap modul dapat mengatur tingkat penelusuran kesalahannya sendiri untuk setiap jenis pesan. ( Modul adalah DLL atau executable yang dapat dimuat menggunakan fungsi LoadLibrary .) Tingkat penelusuran kesalahan modul muncul di registri di bawah kunci berikut:

\ HKEY_LOCAL_MACHINE<DebugRoot>\<ModuleName>\<MessageType>

di mana <Jenis> Pesan adalah jenis pesan dikurangi "LOG_" awal; misalnya, LOCKING untuk pesan LOG_LOCKING. Saat modul dimuat, pustaka debug menemukan tingkat pengelogan modul di registri. Jika kunci registri tidak ada, pustaka debug membuatnya.

Modul juga dapat mengatur tingkatnya sendiri pada durasi, menggunakan fungsi DbgSetModuleLevel . Untuk mengirim pesan ke output debug, panggil makro DbgLog . Contoh berikut membuat pesan tipe LOG_TRACE tingkat 3:

Anda juga dapat menentukan tingkat pengelogan global, dengan kunci registri berikut:

\HKEY_LOCAL_MACHINE\<DebugRoot>\GLOBAL\<Message Type>

Pustaka debug menggunakan tingkat mana pun yang lebih besar, tingkat global atau tingkat modul.

Lokasi Keluaran Debug

Lokasi output debug ditentukan oleh kunci registri lain:

\ HKEY_LOCAL_MACHINELogToFile Nama \>Modile DebugRoot<><\

Jika nilai kunci ini adalah Console, output masuk ke jendela konsol. Jika nilainya adalah Deb, Debug, Debugger, atau string kosong, output masuk ke jendela debugger. Jika tidak, output ditulis ke file yang ditentukan oleh kunci registri.

Sebelum executable menggunakan pustaka debug DirectShow, ia harus memanggil fungsi DbgInitialise . Setelah itu, ia harus memanggil fungsi DbgTerminate . DLL tidak perlu memanggil fungsi-fungsi ini, karena titik entri DLL (ditentukan dalam pustaka kelas dasar) memanggilnya secara otomatis.

Utilitas Debugging