Как отлаживать ReactOS, мои заметки (dmsg и его друзья)

Обсуждаем ReactOS по-русски

Moderators: fog, fireball

Post Reply
Mna.
Posts: 122
Joined: Thu Dec 02, 2010 3:13 pm

Как отлаживать ReactOS, мои заметки (dmsg и его друзья)

Post by Mna. »

Несколько моих слов о том как отлаживать ReactOS

Команда 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 строчки.
Last edited by Mna. on Sat Apr 30, 2011 9:10 am, edited 2 times in total.
dima1981m
Posts: 125
Joined: Sun Mar 14, 2010 12:47 am
Location: Самара
Contact:

Re: Как отлаживать ReactOS, мои заметки (dmsg и его друзья)

Post by dima1981m »

Mna. тебе нужно маны для ROS сочинять, вобще отличное изложение получается.

Но все таки я за то чтоб patch (6018) включили на стадии альфа, бета в все сборки.

кстати может еще инструкцию как скомпилировать образ на linux и ubuntu сделаешь, пока патч не включили в сборки?

Распаковываю образ, потом запаковываю все распакованные каталоги, прожигаю, но он почему то не грузится, запаковываю программой brasero на ubuntu
За 2 goda стабильный ReactOS возьмет у windows 30% рынка
serrox
Posts: 131
Joined: Sun Nov 22, 2009 7:31 pm
Contact:

Re: Как отлаживать ReactOS, мои заметки (dmsg и его друзья)

Post by serrox »

есть тупой вопрос, надеюсь простите:
а как этот патч применить можно применить к имеющимся на компе исходникам?
hto
Developer
Posts: 2193
Joined: Sun Oct 01, 2006 3:43 pm

Post by hto »

• Войти в каталог, в котором расположены файлы COPYING, CREDITS, README, etc.
• Выполнить команду patch -p0 < …kernel_dmesg-180311.patch (вместо … подставить путь к файлу).
serrox
Posts: 131
Joined: Sun Nov 22, 2009 7:31 pm
Contact:

Re: Как отлаживать ReactOS, мои заметки (dmsg и его друзья)

Post by serrox »

благодорю =)
dima1981m
Posts: 125
Joined: Sun Mar 14, 2010 12:47 am
Location: Самара
Contact:

Re: Как отлаживать ReactOS, мои заметки (dmsg и его друзья)

Post by dima1981m »

За 2 goda стабильный ReactOS возьмет у windows 30% рынка
Mna.
Posts: 122
Joined: Thu Dec 02, 2010 3:13 pm

Re: Как отлаживать ReactOS, мои заметки (dmsg и его друзья)

Post by Mna. »

Выложил образ r51500 с примененным патчем. Cкачать можно отсюда: ReactOS-LiveCD-r51500-debug-dmesg_patch.iso.7z.
Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests