Metode IDebugControl2::ControlledOutput (dbgeng.h)

Metode ControlledOutput memformat string dan mengirim hasilnya ke panggilan balik output yang terdaftar di beberapa klien mesin.

Sintaks

HRESULT ControlledOutput(
  [in] ULONG OutputControl,
  [in] ULONG Mask,
  [in] PCSTR Format,
       ...   
);

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}: &quot;Hello <World>&quot;
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]

...

Menentukan parameter tambahan yang mewakili nilai yang akan dimasukkan ke dalam output selama pemformatan.

Mengembalikan nilai

Metode ini juga dapat mengembalikan nilai kesalahan. Lihat Mengembalikan Nilai untuk detail selengkapnya.

Menampilkan kode Deskripsi
S_OK
Metode berhasil.

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 semakin terpotok, Anda mungkin perlu membagi output Anda menjadi beberapa permintaan.

Persyaratan

Persyaratan Nilai
Target Platform Desktop
Header dbgeng.h (termasuk Dbgeng.h)

Lihat juga

.printf

ControlledOutputVaList

IDebugControl

IDebugControl2

IDebugControl3

Output

dprintf