Menggunakan Input dan Output

Untuk gambaran umum aliran input dan output di mesin debugger, lihat Input dan Output.

Input

Mesin akan meminta input dari semua kliennya jika metode Input dipanggil pada klien. Input dikembalikan ke pemanggil Input.

Panggilan Balik Input

Ketika mesin meminta input dari klien, mesin menggunakan objek IDebugInputCallbacks yang terdaftar di klien tersebut. Objek IDebugInputCallbacks dapat didaftarkan ke klien menggunakan SetInputCallbacks. Setiap klien dapat memiliki paling banyak satu objek IDebugInputCallbacks yang terdaftar di dalamnya.

Permintaan input dimulai dengan mesin yang memanggil metode IDebugInputCallbacks::StartInput . Ini menginformasikan objek IDebugInputCallbacks bahwa mesin sekarang menunggu input.

Jika objek IDebugInputCallbacks memiliki beberapa input untuk mesin, objek tersebut dapat memanggil metode ReturnInput dari klien mana pun. Setelah metode ReturnInput dipanggil, mesin tidak akan mengambil input lagi. Penelepon berikutnya dari metode ini akan diberi tahu bahwa input tidak diterima.

Mesin kemudian akan memanggil IDebugInputCallbacks::EndInput untuk menunjukkan bahwa mesin telah berhenti menunggu input.

Terakhir, mesin akan menggemakan input ini ke objek IDebugOutputCallbacks terdaftar dari setiap klien (kecuali yang digunakan untuk memberikan input) dengan menggunakan IDebugOutputCallbacks::Output dengan bit-mask diatur ke DEBUG_OUTPUT_PROMPT.

Output

Output dapat dikirim ke mesin menggunakan beberapa metode klien -- misalnya Output dan OutputVaList. Setelah menerima output, mesin mengirimkannya ke beberapa klien.

Klien menggunakan masker output untuk menunjukkan jenis output mana yang mereka minati. Setiap kali output diproduksi oleh mesin, output disertai dengan masker yang menentukan jenis outputnya. Jika jenis output cocok dengan masker output klien, klien akan menerima output. Masker output dapat diatur dengan memanggil SetOutputMask dan dikueri menggunakan GetOutputMask. Lihat DEBUG_OUTPUT_XXX untuk detail nilai masker output.

Daftar klien tempat mesin akan mengirim output dikendalikan oleh kontrol output. Biasanya, kontrol output diatur untuk mengirim output ke semua klien; namun, dapat diubah sementara menggunakan ControlledOutput dan ControlledOutputVaList. Lihat DEBUG_OUTCTL_XXX untuk detail tentang nilai kontrol output.

Output dapat di-buffer oleh mesin. Jika beberapa bagian output diteruskan ke mesin, ia dapat mengumpulkannya dan mengirimkannya ke klien dalam satu bagian besar. Untuk membersihkan buffer ini, gunakan FlushCallbacks.

Setiap objek klien memiliki lebar output, yang merupakan lebar tampilan output untuk objek klien. Meskipun lebar ini hanya digunakan sebagai petunjuk, beberapa perintah dan fungsi ekstensi memformat outputnya berdasarkan lebar ini. Lebar dikembalikan oleh metode GetOutputWidth dan dapat diatur menggunakan metode SetOutputWidth.

Panggilan Balik Output

Ketika mesin mengirim output ke klien, mesin menggunakan objek IDebugOutputCallbacks yang terdaftar di klien. Objek IDebugOutputCallbacks dapat didaftarkan ke klien menggunakan SetOutputCallbacks. Setiap klien dapat memiliki paling banyak satu objek IDebugInputCallbacks yang terdaftar di dalamnya.

Untuk mengirim output, mesin memanggil metode IDebugOutputCallbacks::Output .

Awalan Baris Output

Setiap objek klien memiliki awalan baris output yang ditambahkan ke setiap baris output yang dikirim ke panggilan balik output yang terkait dengan objek klien. Ini dapat digunakan untuk indentasi atau untuk menempatkan tanda identifikasi pada setiap baris output.

Awalan baris output dikembalikan oleh GetOutputLinePrefix dan dapat diatur menggunakan SetOutputLinePrefix. Untuk mengubah awalan baris output untuk sementara waktu dan kemudian mengubahnya kembali, gunakan PushOutputLinePrefix dan PopOutputLinePrefix.

File Log

Mesin debugger mendukung pembukaan file log untuk merekam sesi debugging. Paling banyak, satu file log dapat dibuka pada satu waktu. Output yang dikirim ke panggilan balik output juga dikirim ke file log ini (kecuali ditandai untuk tidak dicatat).

Untuk membuka file log, gunakan OpenLogFile2 (atau OpenLogFile). Metode GetLogFile2 (atau GetLogFile) mengembalikan file log yang saat ini terbuka. Untuk menutup file log, gunakan CloseLogFile.

Metode SetLogMask dapat digunakan untuk memfilter output yang dikirim ke file log, dan GetLogMask akan mengembalikan filter file log saat ini.

Prompt

Dalam sesi penelusuran kesalahan interaktif, perintah dapat digunakan untuk menunjukkan kepada pengguna bahwa debugger sedang menunggu input pengguna. Perintah dikirim ke panggilan balik output menggunakan metode OutputPrompt dan OutputPromptVaList . Konten perintah standar dikembalikan oleh GetPromptText.