Команда dmesg (она же kmsg от kernel dmesg):
Пока patch (6018) не включен, но можно скачать, пропатчить исходники и скомпилировать.
UPD. Готовый образ r51500 с примененным патчем можно скачать отсюда: ReactOS-LiveCD-r51500-debug-dmesg_patch.iso.7z.
Этот патч добавляет новую команду dmesg к дебаггеру ядра ReactOS kdbg.
Эта команда - аналог 'dmesg|more' из unix-систем, но вызываеется из консоли дебаггера.
Позволяет просматривать уже показанные сообщения лога, не требуя последовательного кабеля
и второй терминальной машины. Сообщения показываются на экране. Их можно листать вверх-вниз.
Требуется, чтоб ключ /DEBUGPORT=SCREEN был указан в параметрах ядра для FreeLdr.
Работает только в debug версии.
* Клавиши навигации: h или Home, e или End, PageUp, Стрелка вверх, все остальные - PageDown.
* q - выход.
Прежнее имя команды kmsg, оставлено как alias: довольно удобно набирать: tab+kkmsg<enter>
"Программисткая" отладка:Как этот патч применить к имеющимся исходникам:
Войти в каталог, в котором расположены файлы COPYING, CREDITS, README, etc.
Выполнить команду patch -p0 < …kernel_dmesg-300311.patch (вместо … подставить путь к файлу).
* Есть еще одна возможность отладки, не оформлена как команда, и не оформлена как патч -
и неизвестно интересно ли будет кому-то. UPD. выложил тут
Назваю ее DbgAtTimeCheckpoints: Автоматичческий вызов дебаггера в заранее заданные моменты времени.
Для чего:
Поскольку:
В первой фазе загрузки, Tab+k не работает, и поэтому собственно dmesg вызвать именно так,
в первой фазе не получится, (а во второй все затрет графический экран).
Обычный драйвер клавиатуры i8042prt.sys в первой фазе не загружен, а свои операции с клавиатурой
дебаггер обрабатывает сам - прерывание клавиатуры не перехвачено. Чтобы не городить целый драйвер, новый
драйвер клавиатуры,
Постольку:
выбрал привязывать вызов дебаггера к моментам времени.
Как:
Задаются моменты времени когда вызывать дебаггер, в секундах (в принципе можно с точностью до 10ms, или даже 100ns).
В нужный момент возникает дебаггер и можно посмотреть сообщения (kmsg как обычно), просмотреть список
процессов и потоков в них.
Пока активирован дебаггер, время DbgAtTimeCheckpoints не идет, времена задаются относительно, что позволяет узнавать сколько
времени пройдет до того или иного события, и подгонять правильное время для вызовов.
Не особенно удобно то, что в текущей реализации требуется перекомпиляции при каждом изменении, но в целом работает, и пока
использую.
Появилось совсем недавно и шероховатое.
Интересно, что запуски показали, что одинаковые баги на одинаковом оборудовании возникают повторяемо, удивительно точно
в одно и то же время, вне зависимости, сколько времени потратилось внутри промежуточных debug-сессий.
* Еще она возможность отладки: Когда известно откуда нужно попасть в дебаггер, точное место в коде,
- то можно генерировать перехватываемое исключение в режиме ядра; при указанном ключе /FIRSTCHANCE
автоматически вызовется дебаггер.
А в пользовательском режиме вызывать DbgBreakPoint(); Только это почему-то не всегда срабатывало.
Где-то в вики было что вызывать для этих случаев KeBugCheck(), но это совсем не то: убивает систему и не позволяет ее исследовать.
Кроме того сообщения в BugCheck режиме часто налезают друг на друга и прочитать можно еще только верхние 2 строчки.