Usando entrada e saída

Para obter uma visão geral dos fluxos de entrada e saída no mecanismo do depurador, consulte entrada e saída.

Entrada

O mecanismo solicitará entrada de todos os seus clientes se o método de entrada for chamado em um cliente. A entrada é retornada para o chamador de entrada.

Retornos de chamada de entrada

Quando o mecanismo solicita entrada de um cliente, ele usa o objeto IDebugInputCallbacks registrado com esse cliente. Um objeto IDebugInputCallbacks pode ser registrado com um cliente usando SetInputCallbacks. Cada cliente pode ter no máximo um objeto IDebugInputCallbacks registrado nele.

A solicitação de entrada começa com o mecanismo que chama o método IDebugInputCallbacks:: StartInput . Isso informa ao objeto IDebugInputCallbacks que o mecanismo agora está aguardando a entrada.

Se o objeto IDebugInputCallbacks tiver alguma entrada para o mecanismo, ele poderá chamar o método ReturnInput de qualquer cliente. Depois que o método ReturnInput tiver sido chamado, o mecanismo não usará mais nenhuma entrada. Os chamadores subsequentes desse método serão informados de que a entrada não foi recebida.

O mecanismo Então chamará IDebugInputCallbacks:: endinput para indicar que parou de esperar pela entrada.

Por fim, o mecanismo irá ecoar essa entrada para o objeto IDebugOutputCallbacks registrado de cada cliente (exceto aquele usado para fornecer a entrada) usando IDebugOutputCallbacks:: output com a máscara de bits definida como DEBUG_OUTPUT_PROMPT.

Saída

A saída pode ser enviada ao mecanismo usando vários métodos de cliente – por exemplo, output e OutputVaList. Após o recebimento da saída, o mecanismo a envia para alguns clientes.

Os clientes usam uma máscara de saída para indicar em quais tipos de saída eles estão interessados. Sempre que a saída é produzida pelo mecanismo, ela é acompanhada por uma máscara que especifica seu tipo de saída. Se o tipo de saída corresponder à máscara de saída do cliente, o cliente receberá a saída. A máscara de saída pode ser definida chamando SetOutputMask e consultado usando GetOutputMask. Consulte DEBUG_OUTPUT_XXX para obter detalhes dos valores de máscara de saída.

A lista de clientes para os quais o mecanismo enviará a saída é controlada pelo controle de saída. Normalmente, o controle de saída é definido para enviar a saída para todos os clientes; no entanto, ele pode ser alterado temporariamente usando ControlledOutput e ControlledOutputVaList. Consulte DEBUG_OUTCTL_XXX para obter detalhes sobre os valores de controle de saída.

A saída pode ser armazenada em buffer pelo mecanismo. Se várias partes da saída forem passadas para o mecanismo, elas poderão ser coletadas e enviadas para os clientes em uma parte grande. Para liberar esse buffer, use FlushCallbacks.

Cada objeto de cliente tem uma largura de saída, que é a largura da exibição de saída para o objeto de cliente. Embora essa largura seja usada apenas como uma dica, alguns comandos e funções de extensão formatam sua saída com base nessa largura. A largura é retornada pelo método GetOutputWidth e pode ser definida usando o método SetOutputWidth.

Retornos de chamada de saída

Quando o mecanismo envia a saída para um cliente, ele usa o objeto IDebugOutputCallbacks registrado com o cliente. Um objeto IDebugOutputCallbacks pode ser registrado com um cliente usando SetOutputCallbacks. Cada cliente pode ter no máximo um objeto IDebugInputCallbacks registrado nele.

Para enviar a saída, o mecanismo chama o método IDebugOutputCallbacks:: output .

Prefixo da linha de saída

Cada objeto de cliente tem um prefixo de linha de saída que é anexado a cada linha de saída enviada para o retorno de chamada de saída associado ao objeto de cliente. Isso pode ser usado para recuo ou para posicionar marcas de identificação em cada linha de saída.

O prefixo de linha de saída é retornado por GetOutputLinePrefix e pode ser definido usando SetOutputLinePrefix. Para alterar temporariamente o prefixo da linha de saída e posteriormente alterá-lo novamente, use PushOutputLinePrefix e PopOutputLinePrefix.

Arquivos de log

O mecanismo do depurador oferece suporte à abertura de um arquivo de log para registrar uma sessão de depuração. No máximo, um arquivo de log pode ser aberto por vez. A saída enviada para os retornos de chamada de saída também é enviada para esse arquivo de log (a menos que ele esteja sinalizado para não ser registrado).

Para abrir um arquivo de log, use OpenLogFile2 (ou OpenLogFile). O método GetLogFile2 (ou getlogfile) retorna o arquivo de log aberto no momento. Para fechar o arquivo de log, use CloseLogFile.

O método SetLogMask pode ser usado para filtrar a saída enviada ao arquivo de log e GetLogMask retornará o filtro de arquivo de log atual.

Aviso

Em uma sessão de depuração interativa, um prompt pode ser usado para indicar ao usuário que o depurador está aguardando a entrada do usuário. O prompt é enviado para os retornos de chamada de saída usando os métodos OutputPrompt e OutputPromptVaList . O conteúdo do prompt padrão é retornado por GetPromptText.