Partager via


IDebugControl ::ControlOutputVaList, méthode (dbgeng.h)

La méthode ControlledOutputVaList met en forme une chaîne et envoie le résultat à rappels de sortie inscrits auprès de certains clients du moteur.

Syntaxe

HRESULT ControlledOutputVaList(
  [in] ULONG   OutputControl,
  [in] ULONG   Mask,
  [in] PCSTR   Format,
  [in] va_list Args
);

Paramètres

[in] OutputControl

Spécifie un contrôle de sortie qui détermine les rappels de sortie du client qui recevront la sortie. Pour connaître les valeurs possibles, consultez DEBUG_OUTCTL_XXX. Pour plus d’informations sur la sortie, consultez d’entrée et de sortie.

[in] Mask

Spécifie le champ bit de type sortie. Consultez DEBUG_OUTPUT_XXX pour connaître les valeurs possibles.

[in] Format

Spécifie la chaîne de format, comme dans printf . En règle générale, les caractères de conversion fonctionnent exactement comme dans C. Pour les caractères de conversion à virgule flottante, l’argument 64 bits est interprété comme un nombre à virgule flottante 32 bits, sauf si le modificateur l est utilisé.

Le caractère de conversion %p est pris en charge, mais il représente un pointeur dans l’espace d’adressage d’une cible. Il peut ne pas avoir de modificateurs et utilise la mise en forme d’adresse interne du débogueur. Les caractères de conversion supplémentaires suivants sont pris en charge.

Personnage Type d’argument Argument Texte imprimé
%p ULONG64 Pointeur dans un espace d’adressage. Valeur du pointeur.
%N DWORD_PTR (32 ou 64 bits, selon l’architecture de l’hôte) Pointeur dans l’espace d’adressage virtuel de l’hôte. Valeur du pointeur. (Cela équivaut au caractère de %p C standard.)
%I ULONG64 Toute valeur 64 bits. Valeur spécifiée. Si cette valeur est supérieure à 0xFFFFFFFF, elle est imprimée sous forme de valeur 64 bits ; sinon, elle est imprimée sous la forme d’une valeur 32 bits.
%ma ULONG64 Adresse d’une chaîne ASCII terminée par NULL dans l’espace d’adressage virtuel du processus. Chaîne spécifiée.
%mu ULONG64 Adresse d’une chaîne Unicode terminée par NULL dans l’espace d’adressage virtuel du processus. Chaîne spécifiée.
%msa ULONG64 Adresse d’une structure ANSI_STRING dans l’espace d’adressage virtuel du processus. Chaîne spécifiée.
%msu ULONG64 Adresse d’une structure UNICODE_STRING dans l’espace d’adressage virtuel du processus. Chaîne spécifiée.
%y ULONG64 Adresse dans l’espace d’adressage virtuel du processus d’un élément avec des informations de symbole. Chaîne qui contient le nom du symbole spécifié (et déplacement, le cas échéant).
%ly ULONG64 Adresse dans l’espace d’adressage virtuel du processus d’un élément avec des informations de symbole. Chaîne qui contient le nom du symbole spécifié (et le déplacement, le cas échéant), ainsi que les informations de ligne source disponibles.
 

Le spécificateur de format %Y peut être utilisé pour prendre en charge le langage de balisage du débogueur (DML). Pour plus d’informations, consultez Personnalisation de la sortie du débogueur à l’aide de DML.

Le tableau suivant récapitule l’utilisation du spécificateur de format %Y.

Personnage Type d’argument Argument Texte imprimé
%Y{t} Corde SMS Chaîne entre guillemets. Convertit le texte en DML si le format de sortie (premier argument) est DML.
%Y{T} Corde SMS Chaîne entre guillemets. Convertit toujours le texte en DML quel que soit le format de sortie.
%Y{s} Corde SMS Chaîne non mise en guillemet. Convertit le texte en DML si le format de sortie (premier argument) est DML.
%Y {S} Corde SMS Chaîne non mise en guillemet. Convertit toujours le texte en DML quel que soit le format de sortie.
%Y{as} ULONG64 Pointeur mis en forme du débogueur Ajoute une chaîne vide ou 9 caractères d’espacement pour le remplissage de la partie 32 bits élevée des champs de pointeur mis en forme du débogueur. L’espace supplémentaire génère 9 espaces qui incluent les 8 zéros supérieurs plus le caractère ' .
%Y{ps} ULONG64 Pointeur mis en forme du débogueur Ajoute une chaîne vide ou 8 caractères d’espacement pour le remplissage de la partie 32 bits élevée des champs de pointeur mis en forme du débogueur.
%Y{l} ULONG64 Pointeur mis en forme du débogueur Adresse en tant qu’informations de ligne source.
 

Cet extrait de code illustre l’utilisation du spécificateur de 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;

}

Cet exemple de code génère la sortie suivante.

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

Spécifie des paramètres supplémentaires qui représentent les valeurs à insérer dans la sortie pendant la mise en forme. Drgs doit être initialisé à l’aide de va_start. Cette méthode n’appelle pas va_end.

Valeur de retour

Retourner le code Description
S_OK
La méthode a réussi.
 

Cette méthode peut également retourner des valeurs d’erreur. Pour plus d’informations, consultez valeurs de retour.

Remarques

Lors de la génération de chaînes de sortie très volumineuses, il est possible d’atteindre les limites du moteur de débogueur ou du système d’exploitation. Par exemple, certaines versions du moteur de débogueur ont une limite de caractères de 16 Ko pour une seule sortie. Si vous constatez que la sortie très volumineuse est tronquée, vous devrez peut-être fractionner votre sortie en plusieurs requêtes.

Les macros va_list, va_startet va_end sont définies dans Stdarg.h.

Exigences

Exigence Valeur
plateforme cible Bureau
d’en-tête dbgeng.h (include Dbgeng.h, Stdarg.h)

Voir aussi

ControlledOutput

IDebugControl

IDebugControl2

IDebugControl3

OutputVaList

dprintf