Uso de entrada y salida

Para obtener información general sobre los flujos de entrada y salida en el motor del depurador, consulte Entrada y salida.

Entrada

El motor solicitará la entrada de todos sus clientes si se llama al método Input en un cliente. La entrada se devuelve al autor de la llamada de Input.

Devoluciones de llamada de entrada

Cuando el motor solicita la entrada de un cliente, usa el objeto IDebugInputCallbacks registrado con ese cliente. Un objeto IDebugInputCallbacks se puede registrar con un cliente mediante SetInputCallbacks. Cada cliente puede tener como máximo un objeto IDebugInputCallbacks registrado con él.

La solicitud de entrada comienza con el motor que llama al método IDebugInputCallbacks::StartInput . Esto informa al objeto IDebugInputCallbacks de que el motor está esperando la entrada.

Si el objeto IDebugInputCallbacks tiene alguna entrada para el motor, puede llamar al método ReturnInput de cualquier cliente. Una vez que se haya llamado al método ReturnInput , el motor no tomará más entradas. Se informará a los autores de llamadas posteriores de este método de que no se recibió la entrada.

A continuación, el motor llamará a IDebugInputCallbacks::EndInput para indicar que ha dejado de esperar la entrada.

Por último, el motor hará eco de esta entrada en el objeto IDebugOutputCallbacks registrado de cada cliente (excepto el usado para proporcionar la entrada) mediante IDebugOutputCallbacks::Output con la máscara de bits establecida en DEBUG_OUTPUT_PROMPT.

Salida

La salida se puede enviar al motor mediante varios métodos de cliente, por ejemplo Output y OutputVaList. Al recibir la salida, el motor lo envía a algunos clientes.

Los clientes usan una máscara de salida para indicar qué tipos de salida están interesados. Cada vez que el motor genera la salida, va acompañada de una máscara que especifica su tipo de salida. Si el tipo de salida coincide con la máscara de salida del cliente, el cliente recibirá la salida. La máscara de salida se puede establecer llamando a SetOutputMask y consultando mediante GetOutputMask. Consulte DEBUG_OUTPUT_XXX para obtener más información sobre los valores de máscara de salida.

La lista de clientes a los que el motor enviará la salida se controla mediante el control de salida. Normalmente, el control de salida se establece para enviar la salida a todos los clientes; sin embargo, se puede cambiar temporalmente mediante ControlledOutput y ControlledOutputVaList. Consulte DEBUG_OUTCTL_XXX para obtener más información sobre los valores de control de salida.

El motor puede almacenar en búfer la salida. Si se pasan varios fragmentos de salida al motor, puede recopilarlos y enviarlos a los clientes en una pieza grande. Para vaciar este búfer, use FlushCallbacks.

Cada objeto de cliente tiene un ancho de salida, que es el ancho de la presentación de salida para el objeto de cliente. Aunque este ancho solo se usa como sugerencia, algunos comandos y funciones de extensión dan formato a su salida en función de este ancho. El método GetOutputWidth devuelve el ancho y se puede establecer mediante el método SetOutputWidth.

Devoluciones de llamada de salida

Cuando el motor envía la salida a un cliente, usa el objeto IDebugOutputCallbacks registrado con el cliente. Un objeto IDebugOutputCallbacks se puede registrar con un cliente mediante SetOutputCallbacks. Cada cliente puede tener como máximo un objeto IDebugInputCallbacks registrado con él.

Para enviar la salida, el motor llama al método IDebugOutputCallbacks::Output .

Prefijo de línea de salida

Cada objeto de cliente tiene un prefijo de línea de salida que se antepone a cada línea de salida enviada a la devolución de llamada de salida asociada al objeto de cliente. Esto se puede usar para la sangría o para colocar marcas de identificación en cada línea de salida.

GetOutputLinePrefix devuelve el prefijo de línea de salida y se puede establecer mediante SetOutputLinePrefix. Para cambiar temporalmente el prefijo de línea de salida y, más adelante, vuelva a cambiarlo, use PushOutputLinePrefix y PopOutputLinePrefix.

Archivos de registro

El motor del depurador admite la apertura de un archivo de registro para registrar una sesión de depuración. Como máximo, un archivo de registro se puede abrir a la vez. La salida enviada a las devoluciones de llamada de salida también se envía a este archivo de registro (a menos que se marque que no se registre).

Para abrir un archivo de registro, use OpenLogFile2 (o OpenLogFile). El método GetLogFile2 (o GetLogFile) devuelve el archivo de registro abierto actualmente. Para cerrar el archivo de registro, use CloseLogFile.

El método SetLogMask se puede usar para filtrar la salida enviada al archivo de registro y GetLogMask devolverá el filtro de archivo de registro actual.

Pronto

En una sesión de depuración interactiva, se puede usar un mensaje para indicar al usuario que el depurador está esperando la entrada del usuario. El símbolo del sistema se envía a las devoluciones de llamada de salida mediante los métodos OutputPrompt y OutputPromptVaList . GetPromptText devuelve el contenido del símbolo del sistema estándar.