когда и как использовать отладку ядра windbg - PullRequest
11 голосов
/ 18 января 2010

Я обнаружил, что Windbg очень полезен при разработке и отладке.но в основном я использую windbg в режиме отладки.

  1. Что может отладка ядра в windbg?или Когда я должен использовать отладку ядра windbg?

  2. Есть ли общий обзор отладки ядра в windbg?

Заранее спасибо.

Ответы [ 3 ]

10 голосов
/ 18 января 2010

вы обычно используете отладку ядра, когда вам нужно отлаживать драйверы устройств низкого уровня, напрямую взаимодействующие с оборудованием.
Отладку в режиме ядра сложнее, помимо прочего, для сеанса отладки в режиме реального времени вы должны запустить отладчик в другой системе, нежели отлаживаемая. Для большинства разработчиков пользовательского режима достаточно, чтобы выполнить большую часть работы.
Расширенная отладка Windows - очень хорошая книга об отладке с помощью wndbg (включает обсуждение отладки ядра).

на сайте dump dump есть много учебных пособий, включая сценарии отладки ядра

9 голосов
/ 07 октября 2010

Основное различие между пользовательским режимом и режимом ядра WINDBG заключается в том, что вы можете видеть КАЖДЫЙ процесс в режиме ядра WINDBG и все потоки. Вам не нужно видеть каждый кадр стека, так как он часто выгружается менеджером памяти.

некоторые общие команды, которые я часто использую.

! Процесс 0 0 перечисляет каждый запущенный процесс:

**** NT ACTIVE PROCESS DUMP ****
PROCESS 80a02a60  Cid: 0002    Peb: 00000000  ParentCid: 0000
    DirBase: 00006e05  ObjectTable: 80a03788  TableSize: 150.
    Image: System
PROCESS 80986f40  Cid: 0012    Peb: 7ffde000  ParentCid: 0002
    DirBase: 000bd605  ObjectTable: 8098fce8  TableSize:  38.
    Image: smss.exe
PROCESS 80958020  Cid: 001a    Peb: 7ffde000  ParentCid: 0012
    DirBase: 0008b205  ObjectTable: 809782a8  TableSize: 150.
    Image: csrss.exe
PROCESS 80955040  Cid: 0020    Peb: 7ffde000  ParentCid: 0012
    DirBase: 00112005  ObjectTable: 80955ce8  TableSize:  54.
    Image: winlogon.exe
PROCESS 8094fce0  Cid: 0026    Peb: 7ffde000  ParentCid: 0020
    DirBase: 00055005  ObjectTable: 80950cc8  TableSize: 222.
    Image: services.exe
PROCESS 8094c020  Cid: 0029    Peb: 7ffde000  ParentCid: 0020
    DirBase: 000c4605  ObjectTable: 80990fe8  TableSize: 110.
    Image: lsass.exe
PROCESS 809258e0  Cid: 0044    Peb: 7ffde000  ParentCid: 0026
    DirBase: 001e5405  ObjectTable: 80925c68  TableSize:  70.
    Image: SPOOLSS.EXE

.process {x} Выберите процесс, который вы хотите сделать активным, обычно сопровождаемый командой! Threads, чтобы вывести список текущих потоков процессов.

! Stacks 0x2 {foo.sys} ищет во всех потоках стеки вызовов, которые содержат указанный драйвер.

! Poolused полезно при отладке ситуаций с низким объемом памяти ядра, и все, что у вас есть, это дамп ядра

.crash Полезно, когда вы отлаживаете в режиме реального времени через последовательный кабель и хотите, чтобы на целевой машине был записан аварийный дамп

! Vm 1 Полезное отображение статистики менеджеров памяти, пример:

*** Virtual Memory Usage ***
      Physical Memory:     16270   (   65080 Kb)
      Page File: \??\E:\pagefile.sys
         Current:     98304Kb Free Space:     61044Kb
         Minimum:     98304Kb Maximum:       196608Kb
      Available Pages:      5543   (   22172 Kb)
      ResAvail Pages:       6759   (   27036 Kb)
      Locked IO Pages:       112   (     448 Kb)
      Free System PTEs:    45089   (  180356 Kb)
      Free NP PTEs:         5145   (   20580 Kb)
      Free Special NP:       336   (    1344 Kb)
      Modified Pages:        714   (    2856 Kb)
      NonPagedPool Usage:    877   (    3508 Kb)
      NonPagedPool Max:     6252   (   25008 Kb)
      PagedPool 0 Usage:     729   (    2916 Kb)
      PagedPool 1 Usage:     432   (    1728 Kb)
      PagedPool 2 Usage:     436   (    1744 Kb)
      PagedPool Usage:      1597   (    6388 Kb)
      PagedPool Maximum:   13312   (   53248 Kb)
      Shared Commit:        1097   (    4388 Kb)
      Special Pool:          229   (     916 Kb)
      Shared Process:       1956   (    7824 Kb)
      PagedPool Commit:     1597   (    6388 Kb)
      Driver Commit:         828   (    3312 Kb)
      Committed pages:     21949   (   87796 Kb)
      Commit limit:        36256   (  145024 Kb)

И не забудь ВСЕ МОГУЩЕЕ! Замки

абсолютно необходимо для устранения неисправностей заблокированного компьютера,

kd> !locks
**** DUMP OF ALL RESOURCE OBJECTS ****
KD: Scanning for held locks......

Resource @ 0x80e97620    Shared 4 owning threads
     Threads: ff688da0-01<*> ff687da0-01<*> ff686da0-01<*> ff685da0-01<*> 
KD: Scanning for held locks.......................................................

Resource @ 0x80e23f38    Shared 1 owning threads
     Threads: 80ed0023-01<*> *** Actual Thread 80ed0020
KD: Scanning for held locks.

Resource @ 0x80d8b0b0    Shared 1 owning threads
     Threads: 80ed0023-01<*> *** Actual Thread 80ed0020
2263 total locks, 3 locks currently held

с помощью этой команды вы можете отслеживать застрявшие потоки в ожидании освобождения другого потока ERESOURCE

0 голосов
/ 19 января 2010

Возможно, вы захотите отлаживать только в режиме ядра, когда ваш код работает в режиме ядра, то есть когда вы пишете драйверы или что-то еще, что работает в ядре. Или, возможно, если вы пытаетесь узнать больше о самой Windows на очень низком уровне, исследуя ядро, ковыряясь и подталкивая к вещам.

При поиске учебников и других справочных материалов вы можете искать ссылки "kd", так как они могут быть очень похожими. (kd - инструмент отладки ядра командной строки.)

...