Enable kernel tracing
Включение трассировки ядра
В ядре 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