Méthode IDebugControl ::ControlledOutputVaList (dbgeng.h)

La méthode ControlledOutputVaList met en forme une chaîne et envoie le résultat aux rappels de sortie qui ont été 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 Entrée et 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 n’a peut-être aucun modificateur et utilise la mise en forme d’adresse interne du débogueur. Les caractères de conversion supplémentaires suivants sont pris en charge.

Caractère 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 C %p standard.)
%I ULONG64 Toute valeur 64 bits. Valeur spécifiée. Si cette valeur est supérieure à 0xFFFFFFFF, elle est imprimée sous la forme d’une 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 le 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.

Caractère Type d’argument Argument Texte imprimé
%Y{t} String Texte Chaîne entre guillemets. Convertit le texte en DML si le format de sortie (premier argument) est DML.
%Y{T} String Texte Chaîne entre guillemets. Convertit toujours le texte en DML, quel que soit le format de sortie.
%Y{s} String Texte Chaîne sans guillemets. Convertit le texte en DML si le format de sortie (premier argument) est DML.
%Y{S} String Texte Chaîne sans guillemets. 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, ce qui inclut 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 pointeurs 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 des valeurs à insérer dans la sortie pendant la mise en forme. Les args doivent être initialisés à l’aide de va_start. Cette méthode n’appelle pas va_end.

Valeur retournée

Code de retour 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 du débogueur ou du système d’exploitation. Par exemple, certaines versions du moteur du débogueur ont une limite de 16 000 caractères 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_start et va_end sont définies dans Stdarg.h.

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête dbgeng.h (inclure Dbgeng.h, Stdarg.h)

Voir aussi

ControlledOutput

IDebugControl

IDebugControl2

IDebugControl3

OutputVaList

dprintf