Usando entrada e saída

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

Entrada

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

Retornos de chamada de entrada

Quando o mecanismo solicita a 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 com ele.

A solicitação de entrada começa com o mecanismo chamando o método IDebugInputCallbacks::StartInput . Isso informa ao objeto IDebugInputCallbacks que o mecanismo agora está aguardando 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 for chamado, o mecanismo não receberá mais nenhuma entrada. Os chamadores subsequentes desse método serão informados de que a entrada não foi recebida.

Em seguida, o mecanismo chamará IDebugInputCallbacks::EndInput para indicar que parou de aguardar a entrada.

Por fim, o mecanismo 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 para o mecanismo usando vários métodos de cliente , por exemplo , Output e OutputVaList. Ao receber a saída, o mecanismo o 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 especificando 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 consultada 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 saída a todos os clientes; no entanto, ele pode ser alterado temporariamente usando ControlledOutput e ControlledOutputVaList. Consulte DEBUG_OUTCTL_XXX para obter detalhes sobre valores de controle de saída.

A saída pode ser armazenada em buffer pelo mecanismo. Se várias partes de saída forem passadas para o mecanismo, elas poderão ser coletadas e enviá-las aos clientes em uma peça grande. Para liberar esse buffer, use FlushCallbacks.

Cada objeto cliente tem uma largura de saída, que é a largura da exibição de saída do objeto 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 com ele.

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

Prefixo de linha de saída

Cada objeto 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 cliente. Isso pode ser usado para recuo ou para colocar marcas de identificação em cada linha de saída.

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

Arquivos de log

O mecanismo de depurador dá 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 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 para o arquivo de log e GetLogMask retornará o filtro de arquivo de log atual.

Prompt

Em uma sessão interativa de depuração, 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.