Enable kernel tracing

Материал из Русский WINE
Перейти к: навигация, поиск

Включение трассировки ядра

В ядре ReactOS имеется компилируемый и активируемый по необходимости механизм помодульной трассировки.

Поддержка трассировки ядра в настроящий момент имеется в следующих модулях: CM, DBGK, IO, LPC, OB и PS

Для активации трассировки конкретного модуля, сначала найдите его файл заголовков в папке ntoskrnl/include/internal/ и измените

 #define _X_DEBUG_ 0x00

на

 #define _X_DEBUG_ 1

_X_DEBUG_ располагается в верхней части заголовка, а X - это сокращённое название модуля. При этом после полной чистой перекомпиляции ядра будет скомпилирована (но не активирована) поддержка трассировки выбранного модуля.

Для активации трассировки в модуле необходимо найти переменную трассировки, и назначить ей в качестве значения одну или несколько отладочных масок. Отладочные маски каждого модуля находятся в файле заголовков этого модуля перед _X_DEBUG_.

Переменные трассировки имеют следующие имена и расположения:

Сокр Имя Файл
CM CmpTraceLevel ntoskrnl/config/cmsysini.c
DBGK DbgkpTraceLevel ntoskrnl/dbgk/dbgkobj.c
IO IopTraceLevel ntoskrnl/io/iomgr.c
LPC LpcpTraceLevel ntoskrnl/lpc/port.c
OB ObpTraceLevel ntoskrnl/ob/obinit.c
PS PspTraceLevel ntoskrnl/ps/query.c

Изначально все переменные установлены в значение 0:

 ULONG PspTraceLevel = 0;

Для установки маски, просто задайте её в качестве значения переменной:

 ULONG PspTraceLevel = PS_THREAD_DEBUG;

При установке нескольких масок, разделяйте их при помощи оператора побитового ИЛИ языка C:

 ULONG PspTraceLevel = PS_THREAD_DEBUG | PS_PROCESS_DEBUG;

Для активации всех масок одновременно, назначьте переменной значение -1 (0xFFFFFFFF, все биты установлены):

 ULONG PspTraceLevel = -1;

Примечание: нет необходимости производить полную чистую перекомпиляцию если вы всего лишь установили отладочные маски.

Пример: Активация трассировки указателей и пространства имён модуля Ob:

1.Активируем _OB_DEBUG_ в ntoskrnl\include\internal\ob.h

 #define _OB_DEBUG_ 1

2.Устанавливаем ObpTraceLevel, расположенный в ntoskrnl\ob\obinit.c, в OB_HANDLE_DEBUG и OB_NAMESPACE_DEBUG.

 ULONG ObpTraceLevel = OB_HANDLE_DEBUG | OB_NAMESPACE_DEBUG;

3.Производим чистую перекомпиляцию ntoskrnl, получая тем самым поддержку трассировки в модуле

 make ntoskrnl_clean ntoskrnl
ReactOS
Search.png
Доклады
О ReactOSARWINSSЧастовстречаемые заблуждения о ReactOS
Информация Новости Выпуски новостейПереводы блоговНовости проектаВидео про ReactOSReactOS на ХабреUSB от Вадима Галянта
Разработка Руководство по программированиюОтсутствующая функциональностьВетви разработкиКомпоненты системыReactOS и WineПлан работРазработчикиСовместимость с dll WindowsНаиболее значимые изменения за годИспользуемые проектыGoogle Summer of CodeИзвестные проблемы
Порты AMD64ARMXboxPowerPC
Компоненты Файловые системыРежим совместимостиОтчеты об ошибкахПечатьUSBЯдро
Загрузчик Восстановление MBRЗагрузка из GRUBПараметры загрузки
Прочее ARWINSSПриложения в ReactOSОформление ReactOS
Другое КоординаторыТипы ядерFreeWin95"Пасхальные яйца" в ReactOS
Помощь
RAM-диск ReactOS по PXEс жесткого диска
Разработка Стиль написания кодаСтандарты RC-файловРабота с документациейВенгерская нотацияGNU Indent • [ Subversion : ветвислияниеиспользование TortoiseSVN ] • Основы переводаОтправка патчей
Репорты Отладка в VirtualBoxОтладка на экранДобавление программы в менеджер приложенийОтправка отчетов
Отладка Com0comGDBKdbgRossym.gdbRoswin.gdbWinDBGРуководство по WinDBGВключение трассировки ядраКоды DPRINTУдалённый отладчик ReactOS
Сборка CMakeRBuildФайлы RBuildАвтоматическое копирование файловСборка MINGW-w64Сборка модулейСреда сборки
Тестирование VirtualBoxVMwareQEMUHyper-VНеобходимый объём дискаПеренос файлов на виртуальный дискУстановка ReactOSУстановка драйверов
Использование ПО в ReactOS Samba
Обновление ReactOSЗагрузочная флешкаЧем можно помочь проектуСоздание нового пользователяЗвук и сеть в VirtualBoxСъемка и публикация видеоIRC-каналОбщие папкиСторонние компоненты
Обзоры ОболочкаNTVDMWOWCommunity Edition