Здравствуйте Andrew S, Вы писали:
AS>Что именно? Говорите точно, скока вешать?
AS>А вообще — ставь SoftIce
Я пробую пользовать WinDbg, подконнектившись к зависшему вин2000 по СОМ порту. Только вот две неясные фичи.
1. если я сижу в kernel-режиме, то могу сделать break в любой момент и смотреть что творится в виндах, но я вижу только стек вызовов внутри kernel.
2. если я пытаюсь приконнектиться к user-отладчику (NTSD) на зависших виндах (заранее там запустил), то break могу сделать только в момент запуска NTSD, а когда тачка уже повисла — не получается (то есть если что-то выкинет exception, то он войдет в break, но я сам насильно это сделать не могу), хотя по kernel-у лазить можно свободно.
Сам вопрос. Как же все-таки войти в прогу на повисшей тачке (прога жрет 100% да так,что ни мышка и клава не откликаются, причем все эти 100% — в kernel)? Или хотябы увидеть ее user-стек.
В 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>Спасибо!
Здравствуйте CBOSS, Вы писали:
CBO>Здравствуйте Andrew S, Вы писали:
AS>>Что именно? Говорите точно, скока вешать?
AS>>А вообще — ставь SoftIce
CBO>Сам вопрос. Как же все-таки войти в прогу на повисшей тачке (прога жрет 100% да так,что ни мышка и клава не откликаются, причем все эти 100% — в kernel)? Или хотябы увидеть ее user-стек.
Найди все потоки отлаживаемого приложения, опередели поток в который ты хочешь войти. Усыпи все остальные потоки, с условием что они не будут блокировать отлаживаемый поток.Понизь приоритет отлаживаемого потока до минимального. Попробуй присоединить к нему отлачик или установить ловушки в SoftIce.
CBO>Спасибо!
Обычно, то, что кушается 100% времени в кернел, является признаком генерации "recovering" эксепшенов. Т.е. система возобновляет выполенение с той же точки, где возник эксепшен, и он возникает снова. Отсюда отсутствие реакции на мышь и клавиатуру, т.к. практически все время программа работает на IRQL_DISPATH.
Здравствуйте whiteForest, Вы писали:
F>Здравствуйте CBOSS, Вы писали:
CBO>>Здравствуйте Andrew S, Вы писали:
AS>>>Что именно? Говорите точно, скока вешать?
AS>>>А вообще — ставь SoftIce
CBO>>Сам вопрос. Как же все-таки войти в прогу на повисшей тачке (прога жрет 100% да так,что ни мышка и клава не откликаются, причем все эти 100% — в kernel)? Или хотябы увидеть ее user-стек.
F> F>Найди все потоки отлаживаемого приложения, опередели поток в который ты хочешь войти. Усыпи все остальные потоки, с условием что они не будут блокировать отлаживаемый поток.Понизь приоритет отлаживаемого потока до минимального. Попробуй присоединить к нему отлачик или установить ловушки в SoftIce.
CBO>>Спасибо!
Здравствуйте 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 вижу, а как на другие потоки смотреть — непойму
Хммм. Ты что, драйвер экрана отлаживаешь или 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
Здравствуйте 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). Позволяет дебажить живую систему без второго компьютера.
А еще есть утилитка 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>Вроде всё.