Проблемы с WinDBG. Некоторые команды выдают ошибки

Тема в разделе "WASM.NT.KERNEL", создана пользователем gh05t, 21 ноя 2009.

  1. gh05t

    gh05t New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    34
    Здравствуйте!

    Использую WinDBG в режиме отладки локального ядра. Сначала при вводе команды !ioapic выдавалось сообщение об ошибке (какое именно, уже сказать не могу, к сожалению). Далее я перезагрузил символы (File - Symbol File Path, там уже стояло srv*D:\Symbols*http://msdl.microsoft.com/download/symbols, я добавил галку Reload, отладчик вывел сообщения о загрузке символов), после чего данная команда заработала.

    Но не работают, например, !timer (Unable to get value of KiTimerTableListHead) или !thread (Unable to get context for thread running on processor 1, HRESULT 0x80004001), также некоторые другие. Подскажите пожалуйста, как это лечиться?

    Система Win 2008 R2 Server, WinDBG 6.11.0001.404 AMD64
     
  2. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    "lm e" и смотри нет ли ошибки загрузки символов у ядра.
     
  3. gh05t

    gh05t New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    34
    lkd> lm e
    start end module name


    все, что выводится по lm e. Ошибок, я смотрю, нет, потому что ничего не загружено. Что загрузить то надо?
     
  4. gh05t

    gh05t New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    34
    Все больше убеждаюсь, что проблема именно с символами. При просмотре Debug - Modules... отображается всего один модуль - nt, а когда пытаюсь его перезагрузить, то отладчик выводит следующее:

    lkd> .reload /f @"ntkrnlmp.exe"

    "ntkrnlmp.exe" was not found in the image list.
    Debugger will attempt to load "ntkrnlmp.exe" at given base 00000000`00000000.

    Please provide the full image name, including the extension (i.e. kernel32.dll)
    for more reliable results.Base address and size overrides can be given as
    .reload <image.ext>=<base>,<size>.
    Unable to add module at 00000000`00000000

    И папка с скаченными символами весит всего 34 метра, хотя полный пак - порядка 280. На сервере символов майкрософта нет символов для сервера 2008 р2?
     
  5. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Модуль ядра в WinDbg обычно обозначается как nt:

    Для решения проблем с символами иногда полезно включить noisy-режим:

     
  6. gh05t

    gh05t New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    34
    И все таки это не решает вот этой проблемы:

    lkd> ln
    GetContextState failed, 0x80004001
    GetContextState failed, 0x80004001
    GetContextState failed, 0x80004001

    или

    lkd> !timer
    Dump system timers

    Interrupt time: 17c202ec 0000001a [11/23/2009 21:16:46.854]

    List Timer Interrupt Low/High Fire Time DPC/thread
    Unable to get value of KiTimerTableListHead
     
  7. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    gh05t
    Посмотри, есть ли e nt,z такой символ:
    x nt!KiTimerTableListHead
     
  8. gh05t

    gh05t New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    34
    lkd> dt nt!KiTimerTableListHead
    Symbol nt!KiTimerTableListHead not found.

    видимо, нет.
     
  9. AntiFreeze

    AntiFreeze Дмитрий

    Публикаций:
    0
    Регистрация:
    26 июн 2008
    Сообщения:
    65
    Собственно, dt и не сработает. Вам же написали, x.
     
  10. gh05t

    gh05t New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    34
    на
    lkd> x nt!KiTimerTableListHead
    ничего не выводится
     
  11. AntiFreeze

    AntiFreeze Дмитрий

    Публикаций:
    0
    Регистрация:
    26 июн 2008
    Сообщения:
    65
    Просмотрел 6-е сообщение, да и в первом было.
    7 - 10 таким образом смысла особого не имеют.

    По всей видимости проблема с символами. Попробуйте скачать их отдельно.
     
  12. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    gh05t
    Символы, я так понял, загрузились нормально. Значит, нужна более свежая версия kdexts.
    Ждём следующую версию DbgTools, скоро должна выйти.
     
  13. 0x6b65

    0x6b65 Забанен

    Публикаций:
    0
    Регистрация:
    8 окт 2009
    Сообщения:
    92
    Попробуй так:
    - узнай, какой модуль ядра у тебя загружен (например ntoskrnl.exe)
    - загрузи этот модуль в WinDbg как "Crash Dump" (из меню или с командной строки WinDbg -z <FILE_NAME>)
    - настрой символы и пути к ним
    - выполни команду .reload /f
    - выполни команду lm
    Посмотри, что отладчик говорит о символах модуля. попробуй получить адреса символов в режиме Crash Dump'а (dt ntoskrnl!KiTimerTableListHead)

    LiveKD?

    и еще момент: ты уверен, что у тебя ядро не пропатчено (в файле на диске)?
     
  14. 0x6b65

    0x6b65 Забанен

    Публикаций:
    0
    Регистрация:
    8 окт 2009
    Сообщения:
    92
    * не "dt ntoskrnl!KiTimerTableListHead", а "x ntoskrnl!KiTimerTableListHead"
     
  15. gh05t

    gh05t New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    34
    Скачал полный пак на 280 метров. Бросил их в папку со старыми символами, скачанными WinDBG. То же самое.

    Ну как вариант... Возможно, я не с того начал изучать WinDBG. Просто читаю Руссиновича, выполняю примеры и вижу существенную разницу в выводах отладчика. По WinDBG есть какие нибудь толковые мануалы, или только родной хелп?

    Это пункт меню File - Open Crash Dump? Так он только файлы типа memory принимает...
     
  16. 0x6b65

    0x6b65 Забанен

    Публикаций:
    0
    Регистрация:
    8 окт 2009
    Сообщения:
    92
    Если в поле ввода имени вбить * и нажать <Enter>, то будут доступны все файлы. Это стандартное поведение диалога открытия/сохранения файлов
     
  17. gh05t

    gh05t New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    34
    Прошу прощения, мог бы и сам догадаться :)

    Вот вывод команды lm

    0:000> lm
    start end module name
    00000001`40000000 00000001`405dd000 ntoskrnl (pdb symbols) d:\symbols\ntkrnlmp.pdb\F8E2A8B5C9B74BF4A6E4A48F180099942\ntkrnlmp.pdb

    x ntoskrnl!KiTimerTableListHead ничего не выводит
     
  18. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Что выводит простенький скриптик?
    Код (Text):
    1. r @$t0=0;
    2. .foreach (symb {x nt!*}){
    3.     r @$t0 = @$t0 + 1
    4. };
    5. r @$t0 = @$t0 / 6;
    6. .printf "Symbol count: %d\n", @$t0;
    Должно быть ~10k
     
  19. gh05t

    gh05t New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2008
    Сообщения:
    34
    Код (Text):
    1. lkd> .foreach (symb {x nt!*}) { r @$t0 = @$t0 + 1 }
    2. lkd>  r @$t0 = @$t0 / 6;
    3. lkd> .printf "Symbol count: %d\n", @$t0;
    4. Symbol count: 18174
    Ну почти... Раза в два больше.
     
  20. 0x6b65

    0x6b65 Забанен

    Публикаций:
    0
    Регистрация:
    8 окт 2009
    Сообщения:
    92
    gh05t, попробуй выполнить команду:

    x ntoskrnl!*TimerTable*

    возможно в твоей сборке изменен префикс или добавлен еще один суффикс для этой переменной