Kernel debugging
От: CBOSS  
Дата: 17.10.02 17:48
Оценка:
Есть тут люди, которые этим занимаются?
Нужен совет по отладке повисающих виндов-2000.
Re: Kernel debugging
От: Andrew S Россия http://alchemy-lab.com
Дата: 18.10.02 13:46
Оценка:
Что именно? Говорите точно, скока вешать?

А вообще — ставь SoftIce

Здравствуйте CBOSS, Вы писали:

CBO>Есть тут люди, которые этим занимаются?

CBO>Нужен совет по отладке повисающих виндов-2000.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Kernel debugging
От: CBOSS  
Дата: 18.10.02 17:19
Оценка:
Здравствуйте Andrew S, Вы писали:

AS>Что именно? Говорите точно, скока вешать?


AS>А вообще — ставь SoftIce


Я пробую пользовать WinDbg, подконнектившись к зависшему вин2000 по СОМ порту. Только вот две неясные фичи.
1. если я сижу в kernel-режиме, то могу сделать break в любой момент и смотреть что творится в виндах, но я вижу только стек вызовов внутри kernel.
2. если я пытаюсь приконнектиться к user-отладчику (NTSD) на зависших виндах (заранее там запустил), то break могу сделать только в момент запуска NTSD, а когда тачка уже повисла — не получается (то есть если что-то выкинет exception, то он войдет в break, но я сам насильно это сделать не могу), хотя по kernel-у лазить можно свободно.

Сам вопрос. Как же все-таки войти в прогу на повисшей тачке (прога жрет 100% да так,что ни мышка и клава не откликаются, причем все эти 100% — в kernel)? Или хотябы увидеть ее user-стек.

Спасибо!
Re[3]: Kernel debugging
От: Andrew S Россия http://alchemy-lab.com
Дата: 18.10.02 21:25
Оценка:
В SoftIce прервать выполнение вполне нормально можно в любой время, а также на фуникцях, используя BPX -точки останова. Еще есть возможности прерывать выполенение по условию и т.п. Плюс если есть сурсеры проги, то можно видеть и их во время отладки. Надо просто отконвертить pdb файлы и загрузить в SoftIce. Но это все касательно SoftIce. И, конечно, главный плюс SoftIce — все отлаживается с одной машине. Так что ставь его и проблемы, скорее всего, будут решены. У меня самого драйвер генерил эксепшены, при этом SoftIce работал на ура, хотя винды ни на что не реагировали.
А док по использованию SoftIce в сети море — так что....


Успехов.

Здравствуйте CBOSS, Вы писали:

CBO>Здравствуйте Andrew S, Вы писали:


AS>>Что именно? Говорите точно, скока вешать?


AS>>А вообще — ставь SoftIce


CBO>Я пробую пользовать WinDbg, подконнектившись к зависшему вин2000 по СОМ порту. Только вот две неясные фичи.

CBO>1. если я сижу в kernel-режиме, то могу сделать break в любой момент и смотреть что творится в виндах, но я вижу только стек вызовов внутри kernel.
CBO>2. если я пытаюсь приконнектиться к user-отладчику (NTSD) на зависших виндах (заранее там запустил), то break могу сделать только в момент запуска NTSD, а когда тачка уже повисла — не получается (то есть если что-то выкинет exception, то он войдет в break, но я сам насильно это сделать не могу), хотя по kernel-у лазить можно свободно.

CBO>Сам вопрос. Как же все-таки войти в прогу на повисшей тачке (прога жрет 100% да так,что ни мышка и клава не откликаются, причем все эти 100% — в kernel)? Или хотябы увидеть ее user-стек.


CBO>Спасибо!
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[3]: Kernel debugging
От: whiteForest  
Дата: 20.10.02 09:54
Оценка:
Здравствуйте CBOSS, Вы писали:

CBO>Здравствуйте Andrew S, Вы писали:


AS>>Что именно? Говорите точно, скока вешать?


AS>>А вообще — ставь SoftIce


CBO>Сам вопрос. Как же все-таки войти в прогу на повисшей тачке (прога жрет 100% да так,что ни мышка и клава не откликаются, причем все эти 100% — в kernel)? Или хотябы увидеть ее user-стек.



Найди все потоки отлаживаемого приложения, опередели поток в который ты хочешь войти. Усыпи все остальные потоки, с условием что они не будут блокировать отлаживаемый поток.Понизь приоритет отлаживаемого потока до минимального. Попробуй присоединить к нему отлачик или установить ловушки в SoftIce.

CBO>Спасибо!
Re[4]: Kernel debugging
От: Andrew S Россия http://alchemy-lab.com
Дата: 20.10.02 14:05
Оценка:
Обычно, то, что кушается 100% времени в кернел, является признаком генерации "recovering" эксепшенов. Т.е. система возобновляет выполенение с той же точки, где возник эксепшен, и он возникает снова. Отсюда отсутствие реакции на мышь и клавиатуру, т.к. практически все время программа работает на IRQL_DISPATH.


Здравствуйте whiteForest, Вы писали:

F>Здравствуйте CBOSS, Вы писали:


CBO>>Здравствуйте Andrew S, Вы писали:


AS>>>Что именно? Говорите точно, скока вешать?


AS>>>А вообще — ставь SoftIce


CBO>>Сам вопрос. Как же все-таки войти в прогу на повисшей тачке (прога жрет 100% да так,что ни мышка и клава не откликаются, причем все эти 100% — в kernel)? Или хотябы увидеть ее user-стек.


F>

F>Найди все потоки отлаживаемого приложения, опередели поток в который ты хочешь войти. Усыпи все остальные потоки, с условием что они не будут блокировать отлаживаемый поток.Понизь приоритет отлаживаемого потока до минимального. Попробуй присоединить к нему отлачик или установить ловушки в SoftIce.

CBO>>Спасибо!
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[4]: Kernel debugging
От: CBOSS  
Дата: 21.10.02 15:02
Оценка:
Здравствуйте whiteForest, Вы писали:

F>Найди все потоки отлаживаемого приложения, опередели поток в который ты хочешь войти. Усыпи все остальные потоки, с условием что они не будут блокировать отлаживаемый поток.Понизь приоритет отлаживаемого потока до минимального. Попробуй присоединить к нему отлачик или установить ловушки в SoftIce.


А какой это даст эффект? Ведь висит в kernel, а там приоритет моего потока, мне кажется, не канает...

Вот kernel-стек. Юзер-стек этого thread-а я снять не смог. После непродолжительного гуляния по отладчику комп ушел в рестарт. Замел, гад, следы
0: kd> k
ChildEBP RetAddr
beb64c64 800653c3 nt!KiFlushNPXState+0x84
beb64c8c 80469fd3 hal!HalEndSystemInterrupt+0x57
beb64cc4 a0015cad nt!MiReserveSystemPtes+0x53
beb64cf0 a00148cb win32k!HMValidateHandleNoSecure+0x1
beb64d0c a0014965 win32k!EXFORMOBJ::vQuickInit+0x5
beb64d30 a0014999 win32k!DEVLOCKOBJ::bLock+0x4f
e2343c68 00000000 win32k!vSynchronizeDriver+0x26

Похоже на то, что где-то здесь все и зацикливается, во всяком случае из win32k!EXFORMOBJ::vQuickInit точно не выходит.

Сейчас пробую разобраться с SoftIce. Не мог бы ты рассказать как ставить ловушки, о которых ты говорил.
И как в нем смотреть стеки интересующих меня потоков? А то как ни войду в него по Ctrl+D почти все время HAL!HalProcessorIdle вижу, а как на другие потоки смотреть — непойму

Спасибо!
Re[5]: Kernel debugging
От: Andrew S Россия http://alchemy-lab.com
Дата: 24.10.02 03:30
Оценка:
Хммм. Ты что, драйвер экрана отлаживаешь или mirror драйвер?
Если да, то странно, именно такого эффекта там сложно добиться, хотя, конечно, можно все.
Самое большое, что мне нравится в SoftIce — это возможность установки точен остановки на функции. Почитай хелп к софт айсу — там все очень подробно. И обязательно скомпили драйвер с дебаг символами, я это делаю примерно так, в PostBuild steps:
"C:\Program Files\NuMega\SoftIceNT\nmsym.exe" /TRANSLATE:SOURCE,PACKAGE,ALWAYS "debug\drivername.sys"
copy /b "debug\drivername.sys" "%SystemRoot%\system32\drivers\drivername.sys"
copy /b "debug\drivername.nms" "%SystemRoot%\system32\drivers\drivername.nms"
"C:\Program Files\NuMega\SoftIceNT\nmsym.exe" /LOAD "%SystemRoot%\system32\drivers\drivername.nms"

В результате имеем всегда свежие загруженные символы в Софт Айсе после каждой сборки драйвера.
А уж отлаживаться по сурсерам проще, нежели ковырять RAW ассемблерный код.

CBO>0: kd> k

CBO>ChildEBP RetAddr
CBO>beb64c64 800653c3 nt!KiFlushNPXState+0x84
CBO>beb64c8c 80469fd3 hal!HalEndSystemInterrupt+0x57
CBO>beb64cc4 a0015cad nt!MiReserveSystemPtes+0x53
CBO>beb64cf0 a00148cb win32k!HMValidateHandleNoSecure+0x1
CBO>beb64d0c a0014965 win32k!EXFORMOBJ::vQuickInit+0x5
CBO>beb64d30 a0014999 win32k!DEVLOCKOBJ::bLock+0x4f
CBO>e2343c68 00000000 win32k!vSynchronizeDriver+0x26
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re: Kernel debugging
От: Dmitry Sustretov Россия  
Дата: 26.10.02 11:39
Оценка:
Здравствуйте CBOSS, Вы писали:

CBO>Есть тут люди, которые этим занимаются?

CBO>Нужен совет по отладке повисающих виндов-2000.

взять ResKit от 2000 -ых. В нём есть kd.
Поставить в Startup and Recovery полный крэш-дамп (перед этим убедиться, что размер своп-файла > размера памяти). Если система не выходит сама в BSOD, помочь ей нажав RightCtrl-ScrlLock-ScrlLock (перед этим поставить HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters\CrashOnCtrlScroll в 1)
Натравить kd на крэш-дамп.

Есть ещё утилитка livekd у Руссиновича (www.sysinternals.com). Позволяет дебажить живую систему без второго компьютера.

Вроде всё.
Re[2]: Kernel debugging
От: Andrew S Россия http://alchemy-lab.com
Дата: 26.10.02 11:42
Оценка:
А еще есть утилитка SoftIce, заменяющая все нижеперечисленные....


DS>взять ResKit от 2000 -ых. В нём есть kd.

DS>Поставить в Startup and Recovery полный крэш-дамп (перед этим убедиться, что размер своп-файла > размера памяти). Если система не выходит сама в BSOD, помочь ей нажав RightCtrl-ScrlLock-ScrlLock (перед этим поставить HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters\CrashOnCtrlScroll в 1)
DS>Натравить kd на крэш-дамп.

DS>Есть ещё утилитка livekd у Руссиновича (www.sysinternals.com). Позволяет дебажить живую систему без второго компьютера.


DS>Вроде всё.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.