Enable kernel tracing — различия между версиями
(Новая страница: «=Включение трассировки ядра= Материал из Неофициальная русскоязычная Wiki проекта ReactOS Пе…») |
NightFox (обсуждение | вклад) м (Категория:Отладка) |
||
(не показаны 2 промежуточные версии ещё одного участника) | |||
Строка 1: | Строка 1: | ||
=Включение трассировки ядра= | =Включение трассировки ядра= | ||
− | |||
− | |||
− | |||
В ядре ReactOS имеется компилируемый и активируемый по необходимости механизм помодульной трассировки. | В ядре ReactOS имеется компилируемый и активируемый по необходимости механизм помодульной трассировки. | ||
Строка 9: | Строка 6: | ||
Для активации трассировки конкретного модуля, сначала найдите его файл заголовков в папке ntoskrnl/include/internal/ и измените | Для активации трассировки конкретного модуля, сначала найдите его файл заголовков в папке ntoskrnl/include/internal/ и измените | ||
− | #define _X_DEBUG_ 0x00 | + | #define _X_DEBUG_ 0x00 |
на | на | ||
− | #define _X_DEBUG_ 1 | + | #define _X_DEBUG_ 1 |
− | _X_DEBUG_ | + | ''_X_DEBUG_'' располагается в верхней части заголовка, а '''X''' - это сокращённое название модуля. При этом после полной чистой перекомпиляции ядра будет скомпилирована (но не активирована) поддержка трассировки выбранного модуля. |
− | Для активации трассировки в модуле необходимо найти переменную трассировки, и назначить ей в качестве значения одну или несколько отладочных масок. Отладочные маски каждого модуля находятся в файле заголовков этого модуля перед _X_DEBUG_. | + | Для активации трассировки в модуле необходимо найти переменную трассировки, и назначить ей в качестве значения одну или несколько отладочных масок. Отладочные маски каждого модуля находятся в файле заголовков этого модуля перед ''_X_DEBUG_''. |
Переменные трассировки имеют следующие имена и расположения: | Переменные трассировки имеют следующие имена и расположения: | ||
− | + | <center> | |
− | Сокр Имя Файл | + | {| class="wikitable collapsible" style="float:center; margin-left:2em" |
− | CM CmpTraceLevel ntoskrnl/config/cmsysini.c | + | !Сокр||Имя||Файл |
− | DBGK DbgkpTraceLevel ntoskrnl/dbgk/dbgkobj.c | + | |- |
− | IO IopTraceLevel ntoskrnl/io/iomgr.c | + | |CM||CmpTraceLevel||ntoskrnl/config/cmsysini.c |
− | LPC LpcpTraceLevel ntoskrnl/lpc/port.c | + | |- |
− | OB ObpTraceLevel ntoskrnl/ob/obinit.c | + | |DBGK||DbgkpTraceLevel||ntoskrnl/dbgk/dbgkobj.c |
− | PS PspTraceLevel ntoskrnl/ps/query.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 | ||
+ | |} | ||
+ | </center> | ||
Изначально все переменные установлены в значение 0: | Изначально все переменные установлены в значение 0: | ||
− | ULONG PspTraceLevel = 0; | + | ULONG PspTraceLevel = 0; |
Для установки маски, просто задайте её в качестве значения переменной: | Для установки маски, просто задайте её в качестве значения переменной: | ||
− | ULONG PspTraceLevel = PS_THREAD_DEBUG; | + | ULONG PspTraceLevel = PS_THREAD_DEBUG; |
При установке нескольких масок, разделяйте их при помощи оператора побитового ИЛИ языка C: | При установке нескольких масок, разделяйте их при помощи оператора побитового ИЛИ языка C: | ||
− | ULONG PspTraceLevel = PS_THREAD_DEBUG | PS_PROCESS_DEBUG; | + | ULONG PspTraceLevel = PS_THREAD_DEBUG | PS_PROCESS_DEBUG; |
Для активации всех масок одновременно, назначьте переменной значение -1 (0xFFFFFFFF, все биты установлены): | Для активации всех масок одновременно, назначьте переменной значение -1 (0xFFFFFFFF, все биты установлены): | ||
− | ULONG PspTraceLevel = -1; | + | ULONG PspTraceLevel = -1; |
− | Примечание: нет необходимости производить полную чистую перекомпиляцию если вы всего лишь установили отладочные маски. | + | '''Примечание:''' нет необходимости производить полную чистую перекомпиляцию если вы всего лишь установили отладочные маски. |
Пример: Активация трассировки указателей и пространства имён модуля Ob: | Пример: Активация трассировки указателей и пространства имён модуля Ob: | ||
− | Активируем _OB_DEBUG_ в ntoskrnl\include\internal\ob.h | + | 1.Активируем _OB_DEBUG_ в ntoskrnl\include\internal\ob.h |
− | #define _OB_DEBUG_ 1 | + | #define _OB_DEBUG_ 1 |
− | Устанавливаем ObpTraceLevel, расположенный в ntoskrnl\ob\obinit.c, в OB_HANDLE_DEBUG и OB_NAMESPACE_DEBUG. | + | 2.Устанавливаем ObpTraceLevel, расположенный в ntoskrnl\ob\obinit.c, в OB_HANDLE_DEBUG и OB_NAMESPACE_DEBUG. |
− | ULONG ObpTraceLevel = OB_HANDLE_DEBUG | OB_NAMESPACE_DEBUG; | + | ULONG ObpTraceLevel = OB_HANDLE_DEBUG | OB_NAMESPACE_DEBUG; |
− | Производим чистую перекомпиляцию ntoskrnl, получая тем самым поддержку трассировки в модуле | + | 3.Производим чистую перекомпиляцию ntoskrnl, получая тем самым поддержку трассировки в модуле |
− | make ntoskrnl_clean ntoskrnl | + | make ntoskrnl_clean ntoskrnl |
{{ReactOS}} | {{ReactOS}} | ||
+ | [[Категория:Переводы официальной вики]] | ||
+ | [[Категория:Отладка]] |
Текущая версия на 11:14, 22 июня 2016
Включение трассировки ядра
В ядре 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