Metode IDebugControl2::ControlledOutputVaList (dbgeng.h)
Metode ControlledOutputVaList memformat string dan mengirim hasilnya ke panggilan balik output yang terdaftar di beberapa klien mesin.
Sintaks
HRESULT ControlledOutputVaList(
[in] ULONG OutputControl,
[in] ULONG Mask,
[in] PCSTR Format,
[in] va_list Args
);
Parameter
[in] OutputControl
Menentukan kontrol output yang menentukan panggilan balik output klien mana yang akan menerima output. Untuk nilai yang mungkin, lihat DEBUG_OUTCTL_XXX. Untuk informasi selengkapnya tentang output, lihat Input dan Output.
[in] Mask
Menentukan bidang bit jenis output. Lihat DEBUG_OUTPUT_XXX untuk nilai yang mungkin.
[in] Format
Menentukan string format, seperti dalam printf. Biasanya, karakter konversi berfungsi persis seperti yang mereka lakukan di C. Untuk karakter konversi floating-point, argumen 64-bit ditafsirkan sebagai angka floating-point 32-bit kecuali pengubah l digunakan.
Karakter konversi %p didukung, tetapi mewakili penunjuk di ruang alamat target. Ini mungkin tidak memiliki pengubah, dan menggunakan pemformatan alamat internal debugger. Karakter konversi tambahan berikut didukung.
Karakter | Jenis Argumen | Argumen | Teks dicetak |
---|---|---|---|
%p | ULONG64 | Penunjuk di ruang alamat. | Nilai penunjuk. |
%N | DWORD_PTR (32 atau 64 bit, tergantung pada arsitektur host) | Pointer di ruang alamat virtual host. | Nilai penunjuk. (Ini setara dengan karakter C %p standar.) |
%I | ULONG64 | Nilai 64-bit apa pun. | Nilai yang ditentukan. Jika ini lebih besar dari 0xFFFFFFFF, ini dicetak sebagai nilai 64-bit; jika tidak, itu dicetak sebagai nilai 32-bit. |
%ma | ULONG64 | Alamat string ASCII yang dihentikan NULL di ruang alamat virtual proses. | String yang ditentukan. |
%mu | ULONG64 | Alamat string Unicode yang dihentikan NULL di ruang alamat virtual proses. | String yang ditentukan. |
%msa | ULONG64 | Alamat struktur ANSI_STRING di ruang alamat virtual proses. | String yang ditentukan. |
%msu | ULONG64 | Alamat struktur UNICODE_STRING di ruang alamat virtual proses. | String yang ditentukan. |
%y | ULONG64 | Alamat dalam ruang alamat virtual proses item dengan informasi simbol. | String yang berisi nama simbol yang ditentukan (dan perpindahan, jika ada). |
%ly | ULONG64 | Alamat dalam ruang alamat virtual proses item dengan informasi simbol. | String yang berisi nama simbol yang ditentukan (dan perpindahan, jika ada), serta informasi baris sumber yang tersedia. |
Penentu format %Y dapat digunakan untuk mendukung Debugger Markup Language (DML). Untuk informasi selengkapnya, lihat Menyesuaikan Output Debugger Menggunakan DML.
Tabel berikut ini meringkas penggunaan penentu format %Y.
Karakter | Jenis Argumen | Argumen | Teks dicetak |
%Y{t} | String | Teks | String yang dikutip. Akan mengonversi teks ke DML jika format output (arg pertama) adalah DML. |
%Y{T} | String | Teks | String yang dikutip. Akan selalu mengonversi teks ke DML terlepas dari format outputnya. |
%Y{s} | String | Teks | Untai (karakter) yang tidak dikutip. Akan mengonversi teks ke DML jika format output (arg pertama) adalah DML. |
%Y{S} | String | Teks | Untai (karakter) yang tidak dikutip. Akan selalu mengonversi teks ke DML terlepas dari format outputnya. |
%Y{as} | ULONG64 | Penunjuk berformat debugger | Menambahkan string kosong atau 9 karakter spasi untuk padding bagian tinggi 32-bit dari bidang penunjuk berformat debugger. Ruang ekstra menghasilkan 9 spasi yang mencakup 8 nol atas ditambah karakter '. |
%Y{ps} | ULONG64 | Penunjuk berformat debugger | Menambahkan string kosong atau 8 karakter penspasian untuk padding bagian tinggi 32-bit dari bidang penunjuk berformat debugger. |
%Y{l} | ULONG64 | Penunjuk berformat debugger | Alamat sebagai informasi baris sumber. |
Cuplikan kode ini menggambarkan penggunaan penentu format %Y.
HRESULT CALLBACK testout(_In_ PDEBUG_CLIENT pClient, _In_ PCWSTR /*pwszArgs*/)
{
HRESULT hr = S_OK;
ComPtr<IDebugControl4> spControl;
IfFailedReturn(pClient->QueryInterface(IID_PPV_ARGS(&spControl)));
spControl->ControlledOutputWide(DEBUG_OUTCTL_DML, DEBUG_OUTPUT_NORMAL, L"DML/NORMAL Y{t}: %Y{t}\n", L"Hello <World>");
spControl->ControlledOutputWide(DEBUG_OUTCTL_DML, DEBUG_OUTPUT_NORMAL, L"DML/NORMAL Y{T}: %Y{T}\n", L"Hello <World>");
spControl->ControlledOutputWide(DEBUG_OUTCTL_DML, DEBUG_OUTPUT_NORMAL, L"DML/NORMAL Y{s}: %Y{s}\n", L"Hello <World>");
spControl->ControlledOutputWide(DEBUG_OUTCTL_DML, DEBUG_OUTPUT_NORMAL, L"DML/NORMAL Y{S}: %Y{S}\n", L"Hello <World>");
spControl->ControlledOutputWide(0, DEBUG_OUTPUT_NORMAL, L"TEXT/NORMAL Y{t}: %Y{t}\n", L"Hello <World>");
spControl->ControlledOutputWide(0, DEBUG_OUTPUT_NORMAL, L"TEXT/NORMAL Y{T}: %Y{T}\n", L"Hello <World>");
spControl->ControlledOutputWide(0, DEBUG_OUTPUT_NORMAL, L"TEXT/NORMAL Y{s}: %Y{s}\n", L"Hello <World>");
spControl->ControlledOutputWide(0, DEBUG_OUTPUT_NORMAL, L"TEXT/NORMAL Y{S}: %Y{S}\n", L"Hello <World>");
spControl->ControlledOutputWide(DEBUG_OUTCTL_DML, DEBUG_OUTPUT_NORMAL, L"DML/NORMAL Y{a}: %Y{a}\n", (ULONG64)0x00007ffa7da163c0);
spControl->ControlledOutputWide(DEBUG_OUTCTL_DML, DEBUG_OUTPUT_NORMAL, L"DML/NORMAL Y{as} 64bit : '%Y{as}'\n", (ULONG64)0x00007ffa7da163c0);
spControl->ControlledOutputWide(DEBUG_OUTCTL_DML, DEBUG_OUTPUT_NORMAL, L"DML/NORMAL Y{as} 32value : '%Y{as}'\n", (ULONG64)0x1);
spControl->ControlledOutputWide(DEBUG_OUTCTL_DML, DEBUG_OUTPUT_NORMAL, L"DML/NORMAL Y{ps} 64bit : '%Y{ps}'\n", (ULONG64)0x00007ffa7da163c0);
spControl->ControlledOutputWide(DEBUG_OUTCTL_DML, DEBUG_OUTPUT_NORMAL, L"DML/NORMAL Y{ps} 32value : '%Y{ps}'\n", (ULONG64)0x1);
spControl->ControlledOutputWide(DEBUG_OUTCTL_DML, DEBUG_OUTPUT_NORMAL, L"DML/NORMAL Y{l}: %Y{l}\n", (ULONG64)0x00007ffa7da163c0);
return hr;
}
Kode sampel ini akan menghasilkan output berikut.
0:004> !testout
DML/NORMAL Y{t}: "Hello <World>"
DML/NORMAL Y{T}: "Hello <World>"
DML/NORMAL Y{s}: Hello <World>
DML/NORMAL Y{S}: Hello <World>
TEXT/NORMAL Y{t}: "Hello <World>"
TEXT/NORMAL Y{T}: "Hello <World>"
TEXT/NORMAL Y{s}: Hello <World>
TEXT/NORMAL Y{S}: Hello <World>
DML/NORMAL Y{a}: 00007ffa`7da163c0
DML/NORMAL Y{as} 64bit : ' '
DML/NORMAL Y{as} 32value : ' '
DML/NORMAL Y{ps} 64bit : ' '
DML/NORMAL Y{ps} 32value : ' '
DML/NORMAL Y{l}: [d:\th\minkernel\kernelbase\debug.c @ 443]
[in] Args
Menentukan parameter tambahan yang mewakili nilai yang akan dimasukkan ke dalam output selama pemformatan. Arg harus diinisialisasi menggunakan va_start. Metode ini tidak memanggil va_end.
Mengembalikan nilai
Menampilkan kode | Deskripsi |
---|---|
|
Metode berhasil. |
Metode ini juga dapat mengembalikan nilai kesalahan. Lihat Mengembalikan Nilai untuk detail selengkapnya.
Keterangan
Saat menghasilkan string output yang sangat besar, dimungkinkan untuk mencapai batas mesin debugger atau sistem operasi. Misalnya, beberapa versi mesin debugger memiliki batas karakter 16K untuk satu output. Jika Anda menemukan bahwa output yang sangat besar terpotong, Anda mungkin perlu membagi output Anda menjadi beberapa permintaan.
Makro va_list, va_start, dan va_end didefinisikan dalam Stdarg.h.
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Desktop |
Header | dbgeng.h (termasuk Dbgeng.h, Stdarg.h) |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk