Utilisation de l’entrée et de la sortie

Pour obtenir une vue d’ensemble des flux d’entrée et de sortie dans le moteur du débogueur, consultez Entrée et sortie.

Entrée

Le moteur demande une entrée à tous ses clients si la méthode Input est appelée sur un client. L’entrée est retournée à l’appelant d’Entrée.

Rappels d’entrée

Lorsque le moteur demande une entrée à partir d’un client, il utilise l’objet IDebugInputCallbacks inscrit auprès de ce client. Un objet IDebugInputCallbacks peut être inscrit auprès d’un client à l’aide de SetInputCallbacks. Chaque client peut avoir au maximum un objet IDebugInputCallbacks inscrit avec lui.

La demande d’entrée commence par le moteur appelant la méthode IDebugInputCallbacks::StartInput . Cela informe l’objet IDebugInputCallbacks que le moteur attend maintenant une entrée.

Si l’objet IDebugInputCallbacks a une entrée pour le moteur, il peut appeler la méthode ReturnInput de n’importe quel client. Une fois la méthode ReturnInput appelée, le moteur ne prend plus d’entrée. Les appelants suivants de cette méthode seront informés que l’entrée n’a pas été reçue.

Le moteur appelle ensuite IDebugInputCallbacks::EndInput pour indiquer qu’il a cessé d’attendre l’entrée.

Enfin, le moteur renvoie cette entrée à l’objet IDebugOutputCallbacks inscrit de chaque client (à l’exception de celui utilisé pour fournir l’entrée) en utilisant IDebugOutputCallbacks::Output avec le bit-mask défini sur DEBUG_OUTPUT_PROMPT.

Sortie

La sortie peut être envoyée au moteur à l’aide de plusieurs méthodes clientes, par exemple Output et OutputVaList. À la réception de la sortie, le moteur l’envoie à certains clients.

Les clients utilisent un masque de sortie pour indiquer les types de sortie qui les intéressent. Chaque fois que la sortie est produite par le moteur, elle est accompagnée d’un masque spécifiant son type de sortie. Si le type de sortie correspond au masque de sortie du client, le client reçoit la sortie. Le masque de sortie peut être défini en appelant SetOutputMask et interrogé à l’aide de GetOutputMask. Consultez DEBUG_OUTPUT_XXX pour plus d’informations sur les valeurs du masque de sortie.

La liste des clients auxquels le moteur enverra la sortie est contrôlée par le contrôle de sortie. En règle générale, le contrôle de sortie est défini pour envoyer la sortie à tous les clients ; toutefois, il peut être modifié temporairement à l’aide de ControlledOutput et ControlledOutputVaList. Pour plus d’informations sur les valeurs de contrôle de sortie , consultez DEBUG_OUTCTL_XXX .

La sortie peut être mise en mémoire tampon par le moteur. Si plusieurs éléments de sortie sont transmis au moteur, celui-ci peut les collecter et les envoyer aux clients en une seule pièce. Pour vider cette mémoire tampon, utilisez FlushCallbacks.

Chaque objet client a une largeur de sortie, qui correspond à la largeur de l’affichage de sortie de l’objet client. Bien que cette largeur ne soit utilisée qu’à titre d’indicateur, certaines commandes et fonctions d’extension formatent leur sortie en fonction de cette largeur. La largeur est retournée par la méthode GetOutputWidth et peut être définie à l’aide de la méthode SetOutputWidth.

Rappels de sortie

Lorsque le moteur envoie une sortie à un client, il utilise l’objet IDebugOutputCallbacks inscrit auprès du client. Un objet IDebugOutputCallbacks peut être inscrit auprès d’un client à l’aide de SetOutputCallbacks. Chaque client peut avoir au maximum un objet IDebugInputCallbacks inscrit avec lui.

Pour envoyer la sortie, le moteur appelle la méthode IDebugOutputCallbacks::Output .

Préfixe de ligne de sortie

Chaque objet client a un préfixe de ligne de sortie qui est ajouté à chaque ligne de sortie envoyée au rappel de sortie associé à l’objet client. Cela peut être utilisé pour la mise en retrait ou pour placer des marques d’identification sur chaque ligne de sortie.

Le préfixe de ligne de sortie est retourné par GetOutputLinePrefix et peut être défini à l’aide de SetOutputLinePrefix. Pour modifier temporairement le préfixe de ligne de sortie et le modifier ultérieurement, utilisez PushOutputLinePrefix et PopOutputLinePrefix.

Fichiers journaux

Le moteur de débogueur prend en charge l’ouverture d’un fichier journal pour enregistrer une session de débogage. Au maximum, un fichier journal peut être ouvert à la fois. La sortie envoyée aux rappels de sortie est également envoyée à ce fichier journal (sauf s’il est marqué pour ne pas être journalisé).

Pour ouvrir un fichier journal, utilisez OpenLogFile2 (ou OpenLogFile). La méthode GetLogFile2 (ou GetLogFile) retourne le fichier journal actuellement ouvert. Pour fermer le fichier journal, utilisez CloseLogFile.

La méthode SetLogMask peut être utilisée pour filtrer la sortie envoyée au fichier journal, et GetLogMask retourne le filtre de fichier journal actuel.

Invite

Dans une session de débogage interactive, une invite peut être utilisée pour indiquer à l’utilisateur que le débogueur attend l’entrée de l’utilisateur. L’invite est envoyée aux rappels de sortie à l’aide des méthodes OutputPrompt et OutputPromptVaList . Le contenu de l’invite standard est retourné par GetPromptText.