Использование входных и выходных данных

Общие сведения о входных и выходных потоках в подсистеме отладчика см. в разделе Входные и выходные данные.

Вход

Подсистема запрашивает входные данные от всех своих клиентов, если метод Input вызывается на клиенте. Входные данные возвращаются вызывающей объекту Input.

Обратные вызовы ввода

Когда обработчик запрашивает входные данные от клиента, он использует объект IDebugInputCallbacks, зарегистрированный в этом клиенте. Объект IDebugInputCallbacks может быть зарегистрирован в клиенте с помощью SetInputCallbacks. У каждого клиента может быть зарегистрирован не более одного объекта IDebugInputCallbacks .

Запрос входных данных начинается с вызова обработчиком метода IDebugInputCallbacks::StartInput . Это сообщает объекту IDebugInputCallbacks о том, что подсистема ожидает входных данных.

Если объект IDebugInputCallbacks имеет некоторые входные данные для подсистемы, он может вызвать метод ReturnInput любого клиента. После вызова метода ReturnInput подсистема больше не будет принимать входные данные. Последующие вызовы этого метода будут проинформированы о том, что входные данные не получены.

Затем обработчик вызовет IDebugInputCallbacks::EndInput , чтобы указать, что он перестал ожидать входных данных.

Наконец, подсистема будет повторять эти входные данные в зарегистрированный объект IDebugOutputCallbacks каждого клиента (за исключением того, который используется для предоставления входных данных) с помощью IDebugOutputCallbacks::Output с битовой маской, для DEBUG_OUTPUT_PROMPT.

Выходные данные

Выходные данные можно отправлять в подсистему с помощью нескольких клиентских методов, например Output и OutputVaList. После получения выходных данных подсистема отправляет их некоторым клиентам.

Клиенты используют маску вывода , чтобы указать, какие типы выходных данных их интересуют. Всякий раз, когда подсистема выдает выходные данные, они сопровождаются маской, указывающей его тип вывода. Если тип выходных данных соответствует маске вывода клиента, клиент получит выходные данные. Маску вывода можно задать путем вызова SetOutputMask и запроса с помощью GetOutputMask. Дополнительные сведения о значениях маски вывода см. в разделе DEBUG_OUTPUT_XXX .

Список клиентов, в которые подсистема будет отправлять выходные данные, контролируется элементом управления выходными данными. Как правило, элемент управления выходными данными настраивается для отправки выходных данных всем клиентам; однако его можно временно изменить с помощью ControlledOutput и ControlledOutputVaList. Дополнительные сведения о значениях выходных элементов управления см. в DEBUG_OUTCTL_XXX.

Выходные данные могут быть буферизованной подсистемой. Если подсистеме передается несколько фрагментов выходных данных, она может собрать их и отправить клиентам в одном большом фрагменте. Чтобы очистить этот буфер, используйте FlushCallbacks.

Каждый клиентский объект имеет ширину вывода, которая представляет собой ширину вывода для клиентского объекта. Хотя эта ширина используется только в качестве указания, некоторые команды и функции расширения форматируют свои выходные данные на основе этой ширины. Ширина возвращается методом GetOutputWidth и может быть задана с помощью метода SetOutputWidth.

Обратные вызовы выходных данных

Когда подсистема отправляет клиенту выходные данные, она использует объект IDebugOutputCallbacks, зарегистрированный в клиенте. Объект IDebugOutputCallbacks можно зарегистрировать в клиенте с помощью SetOutputCallbacks. У каждого клиента может быть зарегистрирован не более одного объекта IDebugInputCallbacks .

Для отправки выходных данных подсистема вызывает метод IDebugOutputCallbacks::Output .

Префикс выходной строки

Каждый клиентский объект имеет префикс выходной строки , который добавляется к каждой строке выходных данных, отправляемых в обратный вызов, связанный с объектом клиента. Его можно использовать для отступа или для размещения идентифицирующие метки в каждой строке выходных данных.

Префикс выходной строки возвращается методом GetOutputLinePrefix и может быть задан с помощью SetOutputLinePrefix. Чтобы временно изменить префикс выходной строки, а затем снова изменить его, используйте PushOutputLinePrefix и PopOutputLinePrefix.

Файлы журнала

Модуль отладчика поддерживает открытие файла журнала для записи сеанса отладки. За один раз можно открыть не более одного файла журнала. Выходные данные, отправляемые в выходные обратные вызовы, также отправляются в этот файл журнала (если он не помечен как не зарегистрирован).

Чтобы открыть файл журнала, используйте OpenLogFile2 (или OpenLogFile). Метод GetLogFile2 (или GetLogFile) возвращает открытый в данный момент файл журнала. Чтобы закрыть файл журнала, используйте CloseLogFile.

Метод SetLogMask можно использовать для фильтрации выходных данных, отправленных в файл журнала, и GetLogMask вернет текущий фильтр файла журнала.

Строке

В интерактивном сеансе отладки можно использовать запрос, чтобы указать пользователю, что отладчик ожидает ввода данных пользователем. Запрос отправляется в выходные обратные вызовы с помощью методов OutputPrompt и OutputPromptVaList . Содержимое стандартного запроса возвращается методом GetPromptText.