Udostępnij przez


Używanie danych wejściowych i wyjściowych

Aby zapoznać się z omówieniem strumieni wejściowych i wyjściowych w silniku debugera, zobacz Dane wejściowe i wyjściowe.

Wkład

Aparat poprosi o dane wejściowe ze wszystkich swoich klientów, jeśli metoda Input jest wywoływana na kliencie. Dane wejściowe są zwracane do obiektu wywołującego dane wejściowe.

Wywołania zwrotne danych wejściowych

Gdy aparat prosi o dane wejściowe od klienta, używa obiektu IDebugInputCallbacks zarejestrowanego u tego klienta. Obiekt IDebugInputCallbacks może zostać zarejestrowany w kliencie przy użyciu polecenia SetInputCallbacks. Każdy klient może mieć co najwyżej jeden obiekt IDebugInputCallbacks zarejestrowany w nim.

Żądanie danych wejściowych zaczyna się od silnika wywołującego metodę IDebugInputCallbacks::StartInput. Informuje to obiekt IDebugInputCallbacks, że teraz aparat oczekuje na dane wejściowe.

Jeśli obiekt IDebugInputCallbacks ma jakieś dane wejściowe dla silnika, może wywołać metodę ReturnInput dowolnego klienta. Po wywołaniu metody ReturnInput aparat nie będzie pobierał więcej danych wejściowych. Kolejne wywołania tej metody zostaną poinformowane o tym, że dane wejściowe nie zostały odebrane.

Następnie aparat wywoła funkcję IDebugInputCallbacks::EndInput , aby wskazać, że przestał czekać na dane wejściowe.

Na koniec aparat będzie odzwierciedlał te dane wejściowe do zarejestrowanego obiektu IDebugOutputCallbacks każdego klienta (z wyjątkiem tego, który został użyty do dostarczenia danych wejściowych) przy użyciu metody IDebugOutputCallbacks::Output z maską bitową ustawioną na DEBUG_OUTPUT_PROMPT.

Wyjście

Dane wyjściowe mogą być wysyłane do silnika przy użyciu kilku metod klienta — na przykład Output i OutputVaList. Po otrzymaniu danych wyjściowych silnik wysyła je do niektórych klientów.

Klienci używają maski wyjściowej, aby wskazać, jakie typy danych wyjściowych ich interesują. Za każdym razem, gdy aparat generuje dane wyjściowe, towarzyszy mu maska określająca jego typ danych wyjściowych. Jeśli typ danych wyjściowych jest zgodny z maską wyjściową klienta, klient otrzyma dane wyjściowe. Maska danych wyjściowych może zostać ustawiona przez wywołanie metody SetOutputMask i odpytanie przy użyciu metody GetOutputMask. Aby uzyskać szczegółowe informacje na temat wartości maski wyjściowej, zobacz DEBUG_OUTPUT_XXX .

Lista klientów, do których aparat będzie wysyłać dane wyjściowe, jest kontrolowana przez kontrolkę danych wyjściowych. Zazwyczaj kontrolka danych wyjściowych jest ustawiona na wysyłanie danych wyjściowych do wszystkich klientów; można go jednak tymczasowo zmienić przy użyciu ControlledOutput i ControlledOutputVaList. Zobacz DEBUG_OUTCTL_XXX , aby uzyskać szczegółowe informacje o wartościach kontrolek danych wyjściowych.

Wyniki mogą być buforowane przez silnik. Jeśli wiele elementów wyjściowych jest przekazywanych do silnika, może je zebrać i wysłać do klientów w jednym dużym pakiecie. Aby opróżnić ten bufor, użyj funkcji FlushCallbacks.

Każdy obiekt klienta ma szerokość wyjściową, która jest szerokością wyświetlania wyjściowego dla tego obiektu klienta. Chociaż ta szerokość jest używana tylko jako wskazówka, niektóre polecenia i funkcje rozszerzenia formatują swoje dane wyjściowe na podstawie tej szerokości. Szerokość jest zwracana przez metodę GetOutputWidth i można ustawić przy użyciu metody SetOutputWidth.

Wywołania zwrotne danych wyjściowych

Gdy silnik wysyła dane wyjściowe do klienta, używa obiektu IDebugOutputCallbacks zarejestrowanego u klienta. Obiekt IDebugOutputCallbacks może zostać zarejestrowany w kliencie przy użyciu polecenia SetOutputCallbacks. Każdy klient może mieć co najwyżej jeden obiekt IDebugInputCallbacks zarejestrowany w nim.

Aby wysłać dane wyjściowe, aparat wywołuje metodę IDebugOutputCallbacks::Output .

Prefiks wiersza wyjściowego

Każdy obiekt klienta ma prefiks wiersza wyjściowego, który jest dodawany na początku każdego wiersza danych wyjściowych wysyłanych do związanego z nim wywołania zwrotnego wyjściowego. Może to być używane do wcięcia lub do umieszczania znaków identyfikacyjnych w każdym wierszu danych wyjściowych.

Prefiks wiersza wyjściowego jest zwracany przez polecenie GetOutputLinePrefix i można go ustawić przy użyciu polecenia SetOutputLinePrefix. Aby tymczasowo zmienić prefiks wiersza wyjściowego i później zmienić go ponownie, użyj pushOutputLinePrefix i PopOutputLinePrefix.

Pliki dziennika

Aparat debugera obsługuje otwieranie pliku dziennika w celu zarejestrowania sesji debugowania. Co najwyżej jeden plik dziennika może być otwarty naraz. Wyjście wysyłane do zwrotnych wywołań jest również przekazywane do tego pliku dziennika (chyba że został oznaczony, aby nie być zarejestrowany).

Aby otworzyć plik dziennika, użyj polecenia OpenLogFile2 (lub OpenLogFile). Metoda GetLogFile2 (lub GetLogFile) zwraca aktualnie otwarty plik dziennika. Aby zamknąć plik dziennika, użyj polecenia CloseLogFile.

Metoda SetLogMask może służyć do filtrowania danych wyjściowych wysyłanych do pliku dziennika, a funkcja GetLogMask zwróci bieżący filtr pliku dziennika.

Podpowiedź

W interakcyjnej sesji debugowania można użyć monitu, aby wskazać użytkownikowi, że debuger oczekuje na dane wejściowe użytkownika. Monit jest wysyłany do wywołań zwrotnych danych wyjściowych przy użyciu metod OutputPrompt i OutputPromptVaList . Zawartość standardowego monitu jest zwracana przez polecenie GetPromptText.