Metodo IDebugControl2::ControlledOutput (dbgeng.h)
Il metodo ControlledOutput formatta una stringa e invia il risultato ai callback di output registrati con alcuni client del motore.
Sintassi
HRESULT ControlledOutput(
[in] ULONG OutputControl,
[in] ULONG Mask,
[in] PCSTR Format,
...
);
Parametri
[in] OutputControl
Specifica un controllo di output che determina quale dei callback di output dei client riceverà l'output. Per i valori possibili, vedere DEBUG_OUTCTL_XXX. Per altre informazioni sull'output, vedere Input e output.
[in] Mask
Specifica il campo di bit del tipo di output. Per i valori possibili, vedere DEBUG_OUTPUT_XXX.
[in] Format
Specifica la stringa di formato, come in printf. In genere, i caratteri di conversione funzionano esattamente come funzionano in C. Per i caratteri di conversione a virgola mobile, l'argomento a 64 bit viene interpretato come numero a virgola mobile a 32 bit, a meno che non venga usato il modificatore l .
Il carattere di conversione %p è supportato, ma rappresenta un puntatore nello spazio indirizzi di una destinazione. Potrebbe non avere modificatori e usa la formattazione degli indirizzi interni del debugger. Sono supportati i caratteri di conversione aggiuntivi seguenti.
Carattere | Tipo di argomento | Argomento | Testo stampato |
---|---|---|---|
%p | ULONG64 | Puntatore in uno spazio indirizzi. | Valore del puntatore. |
%N | DWORD_PTR (32 o 64 bit, a seconda dell'architettura dell'host) | Puntatore nello spazio indirizzi virtuale dell'host. | Valore del puntatore. Equivale al carattere C %p standard. |
%I | ULONG64 | Qualsiasi valore a 64 bit. | Valore specificato. Se è maggiore di 0xFFFFFFFF, viene stampato come valore a 64 bit; in caso contrario, viene stampato come valore a 32 bit. |
%ma | ULONG64 | Indirizzo di una stringa ASCII con terminazione NULL nello spazio indirizzi virtuale del processo. | Stringa specificata |
%mu | ULONG64 | Indirizzo di una stringa Unicode con terminazione NULL nello spazio indirizzi virtuali del processo. | Stringa specificata |
%msa | ULONG64 | Indirizzo di una struttura ANSI_STRING nello spazio indirizzi virtuale del processo. | Stringa specificata |
%msu | ULONG64 | Indirizzo di una struttura di UNICODE_STRING nello spazio indirizzi virtuale del processo. | Stringa specificata |
%y | ULONG64 | Indirizzo nello spazio indirizzi virtuale del processo di un elemento con informazioni sui simboli. | Stringa contenente il nome del simbolo specificato (e spostamento, se presente). |
%ly | ULONG64 | Indirizzo nello spazio indirizzi virtuale del processo di un elemento con informazioni sui simboli. | Stringa contenente il nome del simbolo specificato (e lo spostamento, se presente), nonché eventuali informazioni sulla riga di origine disponibili. |
L'identificatore di formato %Y può essere usato per supportare debugger markup language (DML). Per altre informazioni, vedere Personalizzazione dell'output del debugger tramite DML.
Nella tabella seguente viene riepilogato l'utilizzo dell'identificatore di formato %Y.
Carattere | Tipo di argomento | Argomento | Testo stampato |
%Y{t} | string | Testo | Stringa tra virgolette. Convertirà il testo in DML se il formato di output (primo arg) è DML. |
%Y{T} | string | Testo | Stringa tra virgolette. Convertirà sempre il testo in DML indipendentemente dal formato di output. |
%Y{s} | string | Testo | Stringa non racchiusa tra virgolette. Convertirà il testo in DML se il formato di output (primo arg) è DML. |
%Y{S} | string | Testo | Stringa non racchiusa tra virgolette. Convertirà sempre il testo in DML indipendentemente dal formato di output. |
%Y{as} | ULONG64 | Puntatore formattato del debugger | Aggiunge una stringa vuota o 9 caratteri di spaziatura per la spaziatura interna della parte alta a 32 bit dei campi del puntatore formattati del debugger. Lo spazio aggiuntivo restituisce 9 spazi che includono gli 8 zeri superiori più il carattere ' . |
%Y{ps} | ULONG64 | Puntatore formattato del debugger | Aggiunge una stringa vuota o 8 caratteri di spaziatura per la spaziatura interna della parte alta a 32 bit dei campi puntatore formattati del debugger. |
%Y{l} | ULONG64 | Puntatore formattato del debugger | Indirizzo come informazioni sulla riga di origine. |
Questo frammento di codice illustra l'uso dell'identificatore di formato %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;
}
Questo codice di esempio genererà l'output seguente.
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]
...
Specifica parametri aggiuntivi che rappresentano valori da inserire nell'output durante la formattazione.
Valore restituito
Questo metodo può anche restituire valori di errore. Per altre informazioni, vedere Valori restituiti .
Codice restituito | Descrizione |
---|---|
|
Il metodo è stato eseguito correttamente. |
Commenti
Quando si generano stringhe di output molto grandi, è possibile raggiungere i limiti del motore del debugger o del sistema operativo. Ad esempio, alcune versioni del motore del debugger hanno un limite di caratteri 16K per un singolo output. Se si rileva che l'output molto grande viene troncato, potrebbe essere necessario suddividere l'output in più richieste.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Desktop |
Intestazione | dbgeng.h (includere Dbgeng.h) |