Модуль Trace

Операционная система, написанная на языке Оберон и проект её перевода на русский язык. Только технические вопросы.
Ответить
БудДен
Сообщения: 944
Зарегистрирован: 07.10.18 14:01

Модуль Trace

Сообщение БудДен » 20.04.20 00:27

Слегка запутался в том, как работает KernelLog.

Есть функция Trace.Char, которая изначально устанавливается в Trace.NullChar (ничего не делать).
И похоже, она вызывается при каждом выводе буквы в KernelLog. Но параллельно есть ещё такие модули здесь:

* WMKernelLog.Mod - окошко, где рисуется журнал
* KernelLogger.Mod - "Periodically copy kernel log buffer into text" - похоже, именно он копирует текст в графическое окно KernelLog

Код: Выделить всё

KernelLog.Char
  KernelLog.String
    KernelLog.Send - кладёт в буфер
      Trace.Char - вот как раз эта-то функция каким-то образом и присваивается
Грепим, где она присваивается. Дофига где! А как нам найти нужное место?
Ну, например, Windows.Environment.Mod - более одного раза. Windows.Kernel32.Mod, Windows.Machine.Mod, Windows.WinTrace.Mod.

Огого.

Но попробуем идти через KernelLogger - он по таймеру вызывает цикл, состоящий из Get и за ним
tw.Char. Тут-то и попробуем вмешаться. Но это поток. А что это за поток? Это tw - TextUtilities.TextWriter.
С ним что-то не так?

БудДен
Сообщения: 944
Зарегистрирован: 07.10.18 14:01

Re: Модуль Trace

Сообщение БудДен » 20.04.20 00:32

Запустил другую сборку, к-рая имеет текстовую консоль, и она печатает крокозяблу. Т.е. похоже, что буква теряется только в UI. Выводы: надо перейти на эту текстовую консоль, т.к. удобнее иметь два окна. Пока попробуем без этого обойтись.

Ответить