Enable kernel tracing
Включение трассировки ядра
Материал из Неофициальная русскоязычная Wiki проекта ReactOS Перейти к: навигация, поиск В ядре 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:
Активируем _OB_DEBUG_ в ntoskrnl\include\internal\ob.h
- define _OB_DEBUG_ 1
Устанавливаем ObpTraceLevel, расположенный в ntoskrnl\ob\obinit.c, в OB_HANDLE_DEBUG и OB_NAMESPACE_DEBUG. ULONG ObpTraceLevel = OB_HANDLE_DEBUG | OB_NAMESPACE_DEBUG; Производим чистую перекомпиляцию ntoskrnl, получая тем самым поддержку трассировки в модуле make ntoskrnl_clean ntoskrnl