вторник, 7 июня 2011 г.

WinDbg: !error extension and locale

Проблема

WinDbg имеет весьма полезное расширение !error которое декодирует код ошибки и отображает соответствующее описание.

Но, порой, вместо описания можно увидеть ошибку <unable to get error code text> если отладка происходит в режиме пользователя:
0:000> !error 0xC000000D 1
Error code: (NTSTATUS) 0xc000000d - <unable to get error code text>
Так же, можно увидеть пустую строку или часть сообщения если запущена отладочная сессия ядра:
0: kd> !error 87
Error code: (Win32) 0x87 (135) -                              JOIN     SUBST          ,                          .
Последний вывод, кстати, наталкивает на мысль о том что проблема с локалью.

Решение

Для установки локали в WinDbg, следует использовать команду .locale:
0: kd> .locale
Locale: E

0: kd> .locale ".1251"
Locale: Ukrainian_Ukraine.1251
Результат на лицо:
0: kd> !error 0xC000000D 1
Error code: (NTSTATUS) 0xc000000d - Службе или функции передан неверный параметр.

0: kd> !error 87
Error code: (Win32) 0x87 (135) - Попытка использовать команду JOIN или SUBST для диска, который уже был отображен.
Кстати, локаль так же влияет на корректность отображения информации о статусе ошибки во время анализа аварийных дампов. В таком случае, вместо вменяемого описания можно лицезреть аналогичную картину:
kd> !analyze -v
...
ERROR_CODE: (NTSTATUS) 0x80000003 - {
Установка корректной локали (см. пример выше) меняет ситуацию к лучшему:
kd> !analyze -v
...
ERROR_CODE: (NTSTATUS) 0x80000003 - {ИСКЛЮЧЕНИЕ}  Точка останова  Обнаружена точка останова.

Updated 8.06.2011

Локаль так-же влияет на корректность работы !gle.

Рабочая среда: WinDbg 6.12.0002.633, LiveKd v5.0

Схожие публикации

Комментариев нет:

Отправить комментарий