IDebugControl4::ControlledOutputWide-Methode (dbgeng.h)
Die ControlledOutputWide-Methode formatiert eine Zeichenfolge und sendet das Ergebnis an Ausgaberückrufe , die bei einigen Clients der Engine registriert wurden.
Syntax
HRESULT ControlledOutputWide(
[in] ULONG OutputControl,
[in] ULONG Mask,
[in] PCWSTR Format,
...
);
Parameter
[in] OutputControl
Gibt ein Ausgabesteuerelement an, das bestimmt, welcher der Ausgaberückrufe des Clients die Ausgabe empfängt. Mögliche Werte finden Sie unter DEBUG_OUTCTL_XXX. Weitere Informationen zur Ausgabe finden Sie unter Eingabe und Ausgabe.
[in] Mask
Gibt das Ausgabetyp-Bitfeld 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 die Gleitkommakonvertierungszeichen wird das 64-Bit-Argument als 32-Bit-Gleitkommazahl interpretiert, es sei denn, der l-Modifizierer wird verwendet.
Das % p-Konvertierungszeichen 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 standardmäßigen C %p-Zeichen .) |
%I | ULONG64 | Ein 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 ausgegeben. |
%ma | ULONG64 | Adresse einer MIT 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 des Prozesses eines Elements mit Symbolinformationen. | Zeichenfolge, die den Namen des angegebenen Symbols (und ggf. Verschiebung) enthält. |
%ly | ULONG64 | Adresse im virtuellen Adressraum des Prozesses eines Elements mit Symbolinformationen. | Zeichenfolge, die den Namen des angegebenen Symbols (und ggf. Verschiebung) sowie alle verfügbaren Quellzeileninformationen enthält. |
Der Formatbezeichner %Y kann verwendet werden, um die Debugger-Markupsprache (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 Formatbezeichners %Y zusammengefasst.
Zeichen | Argumenttyp | Argument | Gedruckter Text |
%Y{t} | String | Text | Zeichenfolge in Anführungszeichen. Konvertiert Text in DML, wenn das Ausgabeformat (erster Arg) DML ist. |
%Y{T} | String | Text | Zeichenfolge in Anführungszeichen. Konvertiert Text immer in DML, unabhängig vom Ausgabeformat. |
%Y{s} | String | Text | Zeichenfolge ohne Anführungszeichen. Konvertiert Text in DML, wenn das Ausgabeformat (erster Arg) DML ist. |
%Y{S} | String | Text | Zeichenfolge ohne Anführungszeichen. Konvertiert Text immer in DML, unabhängig vom Ausgabeformat. |
%Y{as} | ULONG64 | Debuggerformatierter Zeiger | Fügt entweder eine leere Zeichenfolge oder 9 Zeichen Abstand zum Auffüllen des hohen 32-Bit-Teils der debuggerformatierten Zeigerfelder hinzu. Das zusätzliche Leerzeichen gibt 9 Leerzeichen aus, die die oberen 8 Nullen plus das Zeichen " enthalten. |
%Y{ps} | ULONG64 | Debuggerformatierter Zeiger | Fügt entweder eine leere Zeichenfolge oder 8 Zeichen Abstand zum Auffüllen des hohen 32-Bit-Teils der debuggerformatierten Zeigerfelder hinzu. |
%Y{l} | ULONG64 | Debuggerformatierter 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}: "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]
...
Gibt zusätzliche Parameter an, die Werte darstellen, die während der Formatierung in die Ausgabe eingefügt werden sollen.
Rückgabewert
Diese Methode kann auch Fehlerwerte zurückgeben. Weitere Informationen finden Sie unter Rückgabewerte .
Rückgabecode | BESCHREIBUNG |
---|---|
|
Die Methode war erfolgreich. |
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 ein Zeichenlimit von 16 KB für eine einzelne Ausgabe auf. Wenn Sie feststellen, dass sehr große Ausgaben abgeschnitten werden, müssen Sie Ihre Ausgabe möglicherweise in mehrere Anforderungen aufteilen.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Desktop |
Kopfzeile | dbgeng.h (einschließlich Dbgeng.h) |