Alter.Org.UA  
 << Back Home EN en   Donate Donate www/www1/www2

Kernel Debugger extension for Log Extraction

DbgPrint logger home

Install

  • WinDbg:

    Скопируйте dbgprn.dll в подкаталог winext вашего WinDbg, например в E:\Program Files\WinDbg\winext. После этого станут доступны команды для работы с логами.

    Сам WinDbg берется отсюда:
    http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx.

    Подробно о сборе логов и настройке WinDbg в связке с DbgPrint Dump можно почитать здесь: WinDbg HOWTO для тестировщиков

    Вместо WinDbg можно использовать i386kd.exe.

  • i386kd.exe NT4: Скопируйте dbgprn.dll в каталог где лежит i386kd.exe
  • i386kd.exe 2000: Почему-то не работает.
  • i386kd.exe XP: Скопируйте dbgprn.dll в подкаталог winext, находящийся рядом с i386kd.exe.

Commands

  • ls, list - просмотреть лог.
  • save - сохранить лог в файл.
  • del - очистить буфер сообщений на отлаживаемой машине. (since v0.6d)
  • lsig - найти буфер сообщений путем поиска сигнатуры в физической памяти.
  • pause - приостановить/продолжить сбор логов. (since v0.6d)
  • drvopt - поменять параметры сбора логов. (since v0.7g)

ls, list

Команда позволяет полностью или частично просмотреть внутренний буфер сообщений. Формат вывода задается точно такими же ключами как и у DbgPrintLog.exe

Note: Иногда WinDbg не удается найти в памяти DbgPrnHk.sys - драйвер, занимающийся сбором логов. Если вы уверены, что драйвер был запушен, можно попробовать найти его по сигнатуре с помощью команды !dbgprn.lsig. А если даже знаете адрес - то вообще хорошо (подробности тут).

!ls [-h] [-i] [-a] [<1st message> [<last message> | -n <NUM messages>]]
  or
!dbgprn.ls [-h] [-i] [-a] [<1st message> [<last message> | -n <NUM messages>]]
  -h           show this help message
  -a           show all messages and summary info
  -e           show messages from entire buffer, including those are passed
                 up to service and potentially saved to disk (since v0.6e)
  --info       show summary info only (default)
  --start NUM  show starting from NUM message in buffer
  --count NUM  show not more than NUM messages
  --last NUM   show only NUM last messages                   (since v0.5f)
  --next NUM   show only NUM last messages                   (since v0.5f)

    Output format modifiers:

  -m           show initiator mode (K - kernel, U - user)
  -p           show Process ID
  -t           show Thread ID
  -i           show IRQL
  -cpu         show CPU number
  --full       same as -m -p -t -i
  -T           show timestamp
  -fm M        do not show messages from <M> mode (<M> can be K or U)
  -sfp         show Stack Frame Pointer                      (since v0.7)

save

Команда позволяет полностью или частично сохранить внутренний буфер сообщений в файл.

Note: Иногда WinDbg не удается найти в памяти DbgPrnHk.sys - драйвер, занимающийся сбором логов. Если вы уверены, что драйвер был запушен, можно попробовать найти его по сигнатуре с помощью команды !dbgprn.lsig.

!save [-h] [-a] [<1st message> [<last message> | -n <NUM messages>]] -f <FILENAME>
  or
!dbgprn.save [-h] [-a] [<1st message> [<last message> | -n <NUM messages>]] -f <FILENAME>
  -h           show this help message
  --file NAME  name of the file for saving messages
  -a           save all messages
  -e           show messages from entire buffer, including those are passed
                 up to service and potentially saved to disk (since v0.6e)
  --start NUM  show starting from NUM message in buffer
  --count NUM  show not more than NUM messages
  --last NUM   show only NUM last messages                   (since v0.5f)

    Output format modifiers:

  -m           show initiator mode (K - kernel, U - user)
  -p           show Process ID
  -t           show Thread ID
  -i           show IRQL
  -cpu         show CPU number
  --full       same as -m -p -t -i
  -T           show timestamp
  -fm M        do not show messages from <M> mode (<M> can be K or U)
  --raw        save messages in raw (binary) format          (since v0.6e)
  -sfp         show Stack Frame Pointer                      (since v0.7)

При использовании RAW формата полученый файл можно сконвертировать в читабельный (текстовый) формат при помощи

    DbgPrintLog.exe --in_file "saved.msg" [<additional options>] "output.log"

del

Команда позволяет очистить внутренний буфер сообщений на отлаживаемой машине. (since v0.6d)

!del
  or
!dbgprn.del

pause

Команда позволяет приостановить/продолжить сбор сообщений на отлаживаемой машине. Без параметров переключает состояние, '+' - включить паузу, '-' - продолжить. (since v0.6d)

!pause [+|-]
  or
!dbgprn.pause [+|-]

drvopt

Команда позволяет менять параметры сбора сообщений на отлаживаемой машине. (since v0.6d)

!drvopt <OPTION_NAME> <VALUE>
  or
!dbgprn.drvopt <OPTION_NAME> <VALUE>

Допустимые OPTION_NAME'ы:

CheckIrql
DoNotPassMessagesDown
StopOnBufferOverflow
TimeStampType
AggregateMessages
DumpToHalDisplay
DumpStackFramePtr
Читайте описание опций здесь.

lsig

Команда позволяет найти буфер сообщений путем сканирования физической памяти на предмет сигнатуры. Может быть полезно в слечае системных поврежденных структур.

!lsig --max MAXMEM   look for signature below MAXMEM Mb
!lsig ADDR           check for signature at ADDR virtual address
!lsig -h             show this help messages
!lsig                look for signature through 1Gb

Адрес сигнатурной страницы ADDR пишется в лог при инициализации драйвера и выглядит это сообщение так:

DbgPrnHkInitialize: Allocated signature page at 0x8078b000 // !dbgprn.lsig 8078b000

Это сообщение видно в отладчике даже если вы используете режим DoNotPassMessagesDown. Мало того, при использовании DoNotPassMessagesDown оно не будет вытеснено белее новыми отладочными сообщениями.


Предложения и замечания слать на

Mail to alterX@alter.org.ua (remove X)  
Автор: Alter (Александр А. Телятников) Сервер: Apache+PHP под FBSD © 2002-2017