IDebugControl4::ControlledOutputVaListWide-Methode (dbgeng.h)

Die ControlledOutputVaListWide-Methode formatiert eine Zeichenfolge und sendet das Ergebnis an Ausgaberückrufe , die bei einigen Clients des Moduls registriert wurden.

Syntax

HRESULT ControlledOutputVaListWide(
  [in] ULONG   OutputControl,
  [in] ULONG   Mask,
  [in] PCWSTR  Format,
  [in] va_list Args
);

Parameter

[in] OutputControl

Gibt ein Ausgabesteuerelement an, das bestimmt, welche Ausgaberückrufe des Clients die Ausgabe empfangen. Mögliche Werte finden Sie unter DEBUG_OUTCTL_XXX. Weitere Informationen zur Ausgabe finden Sie unter Eingabe und Ausgabe.

[in] Mask

Gibt das Ausgabetypbitfeld an. Mögliche Werte finden Sie unter DEBUG_OUTPUT_XXX .

[in] Format

Gibt die Formatzeichenfolge an, wie in printf. In der Regel funktionieren Konvertierungszeichen genau wie in C. Für Gleitkommakonvertierungszeichen wird das 64-Bit-Argument als 32-Bit-Gleitkommazahl interpretiert, es sei denn, der l-Modifizierer wird verwendet.

Das Konvertierungszeichen %p wird unterstützt, stellt aber einen Zeiger im Adressraum eines Ziels dar. Es verfügt möglicherweise über keine Modifizierer und verwendet die interne Adressformatierung des Debuggers. Die folgenden zusätzlichen Konvertierungszeichen werden unterstützt.

Zeichen Argumenttyp Argument Gedruckter Text
%p ULONG64 Zeiger in einem Adressraum. Der Wert des Zeigers.
%N DWORD_PTR (32 oder 64 Bits, abhängig von der Architektur des Hosts) Zeiger im virtuellen Adressraum des Hosts. Der Wert des Zeigers. (Dies entspricht dem C %p-Standardzeichen .)
%I ULONG64 Beliebiger 64-Bit-Wert. Der angegebene Wert. Wenn dieser größer als 0xFFFFFFFF ist, wird er als 64-Bit-Wert gedruckt. Andernfalls wird er als 32-Bit-Wert gedruckt.
%ma ULONG64 Adresse einer NULL-beendeten ASCII-Zeichenfolge im virtuellen Adressraum des Prozesses. Die angegebene Zeichenfolge.
%mu ULONG64 Adresse einer MIT NULL beendeten Unicode-Zeichenfolge im virtuellen Adressraum des Prozesses. Die angegebene Zeichenfolge.
%msa ULONG64 Adresse einer ANSI_STRING Struktur im virtuellen Adressraum des Prozesses. Die angegebene Zeichenfolge.
%msu ULONG64 Adresse einer UNICODE_STRING-Struktur im virtuellen Adressraum des Prozesses. Die angegebene Zeichenfolge.
%y ULONG64 Adresse im virtuellen Adressraum eines Elements mit Symbolinformationen. Zeichenfolge, die den Namen des angegebenen Symbols (und ggf. Verschiebung) enthält.
%ly ULONG64 Adresse im virtuellen Adressraum eines Elements mit Symbolinformationen. Zeichenfolge, die den Namen des angegebenen Symbols (und ggf. Verschiebung) sowie alle verfügbaren Quellzeileninformationen enthält.
 

Der %Y-Formatbezeichner kann verwendet werden, um die Debugger Markup Language (DML) zu unterstützen. Weitere Informationen finden Sie unter Anpassen der Debuggerausgabe mithilfe von DML.

In der folgenden Tabelle wird die Verwendung des %Y-Formatbezeichners zusammengefasst.

Zeichen Argumenttyp Argument Gedruckter Text
%Y{t} String Text Zeichenfolge in Anführungszeichen. Konvertiert Text in DML, wenn das Ausgabeformat (erste Arge) DML ist.
%Y{T} String Text Zeichenfolge in Anführungszeichen. Konvertiert Text unabhängig vom Ausgabeformat immer in DML.
%Y{s} String Text Zeichenfolge ohne Anführungszeichen. Konvertiert Text in DML, wenn das Ausgabeformat (erste Arge) DML ist.
%Y{S} String Text Zeichenfolge ohne Anführungszeichen. Konvertiert Text unabhängig vom Ausgabeformat immer in DML.
%Y{as} ULONG64 Debugger formatierter Zeiger Fügt entweder eine leere Zeichenfolge oder 9 Zeichen Abstand zum Auffüllen des hohen 32-Bit-Teils der Debugger-formatierten Zeigerfelder hinzu. Der zusätzliche Leerraum gibt 9 Leerzeichen aus, die die oberen 8 Nullen plus das Zeichen " enthalten.
%Y{ps} ULONG64 Debugger formatierter Zeiger Fügt entweder eine leere Zeichenfolge oder 8 Zeichen Abstand zum Auffüllen des hohen 32-Bit-Teils der Debugger-formatierten Zeigerfelder hinzu.
%Y{l} ULONG64 Debugger formatierter Zeiger Adresse als Quellzeileninformationen.
 

Dieser Codeausschnitt veranschaulicht die Verwendung des %Y-Formatbezeichners.

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;

}

Dieser Beispielcode würde die folgende Ausgabe generieren.

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]

[in] Args

Gibt zusätzliche Parameter an, die Werte darstellen, die während der Formatierung in die Ausgabe eingefügt werden sollen. Args müssen mit va_start initialisiert werden. Diese Methode ruft va_end nicht auf.

Rückgabewert

Rückgabecode BESCHREIBUNG
S_OK
Die Methode war erfolgreich.
 

Diese Methode gibt möglicherweise auch Fehlerwerte zurück. Weitere Informationen finden Sie unter Rückgabewerte .

Hinweise

Beim Generieren sehr großer Ausgabezeichenfolgen ist es möglich, die Grenzen der Debugger-Engine oder des Betriebssystems zu erreichen. Beispielsweise weisen einige Versionen der Debugger-Engine eine Zeichenbeschränkung von 16 KB für eine einzelne Ausgabe auf. Wenn Sie feststellen, dass sehr große Ausgaben abgeschnitten werden, müssen Sie die Ausgabe möglicherweise in mehrere Anforderungen aufteilen.

Die Makros va_list, va_start und va_end werden in Stdarg.h definiert.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile dbgeng.h (einschließlich Dbgeng.h, Stdarg.h)

Weitere Informationen

ControlledOutput

IDebugControl4

OutputVaList

dprintf