Как избавиться от предупреждений / сообщений об ошибках, связанных с символьным файлом

Я отлаживаю дампфайлы, используя Windbgи регулярно я получаю предупреждения / сообщения об ошибках, например:

*** WARNING: Unable to verify checksum for icuuc58.dll
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for icuuc58.dll - 

Чтобы избежать этого, я уже пытался продолжить всю свою обработку с:

!sym prompts off
!sym quiet

Но предупреждения / сообщения об ошибках продолжают поступать.

Редактировать после первого ответа (подтверждается при втором редактировании)

Я сделал несколько попыток, используя .outmask-6 а также .outmask-206, но все они более или менее потерпели неудачу. Что это значит:

.reload -f => a lot of error/warning messages                      => normal behaviour

.outmask-6 or .outmask-206
.reload -f => no error/warning messages                            => Ok

.outmask-6 or .outmask-206
.reload -f => no error/warning messages                            => Ok
<execution of the whole script> => a lot of error/warning messages => NOK

Я считаю, что есть команды, которые отключают .outmask команда. Можете ли вы подтвердить это, и если да, есть ли такая команда:

.outmask-206(global) (which applies for the whole Windbg session)

Насколько symsrv.ini Что касается файла: у меня нет этого файла на моем компьютере, и, честно говоря, я предпочитаю не искать каждый модуль, загрузка символов которого может вызвать проблемы. Я бы предпочел просто избегать упомянутых предупреждений / сообщений об ошибках.

Изменить после более глубокого понимания вопроса

Одна вещь, которую я еще не упомянул, это PYKD Использование: я работаю над heap_stat, сценарием, основанным на PYKD, для выполнения анализа памяти, и я считаю, что проблема здесь, как вы можете видеть в следующем фрагменте:

Исходный код скрипта:

dbgCommand(".outmask-206")
...
dprintln("1")
type_info = typeInfo(class_name)
dprintln("2")

Вывод скрипта:

1
*** WARNING: Unable to verify checksum for icuuc58.dll
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for icuuc58.dll - 

На мой взгляд, это означает, что PYKDtypeInfo() Объявление объекта - это то, что отключает .outmask()Windbg команда.

@PYKD разработчик: можете ли вы подтвердить это, и если да, добавьте PYKD вопрос для этого? (Я не видел ни одного .outmask связанная проблема на PYKD выдает домашнюю страницу)

3 ответа

Решение

До сих пор было два ответа на мой вопрос:

  • Генерал маскировки Windbg вывод команды
  • Outmasking PYKD вывод команды

Я не могу использовать общий Windbg перебор, как я использую PYKD команды.
Я не могу использовать PYKD изобличение, как я только запускаю (тысячи) PYKD команды, которые каждый раз открывают и закрывают отдельный PYKD сеанс и настройка PYKD outmask слишком сильно замедлит мое приложение.

Поэтому я решил пойти по другому пути: я позабочусь о том, чтобы PYKD Формат выходных сообщений настолько специфичен (он всегда будет содержать символ табуляции), что вместо того, чтобы не использовать сообщения об ошибках, я решу использовать только PYKD сообщения (те, которые содержат символы TAB).

Я протестировал этот подход и могу подтвердить, что он работает нормально.

Спасибо за помощь.

Вы можете подавить сообщения об ошибках / предупреждениях с помощью .outmask-6
или с .outmask-206 для подавления сводки symsrv в конце и предупреждающих сообщений

0:049> .outmask-6
Client 02C95358 mask is 3F1
0:049> .reload /f
Reloading current modules
................................................................
............................................................

будьте осторожны при использовании этого некоторые важные сообщения об ошибках также могут быть подавлены

если вы имеете в виду, вам нужно остановить symsrv от попадания на сервер символов MS и тратить время

настроить symsrv.ini с разделом [exclusion]

cd windbg installation path

echo [exclusions] >> symsrv.ini
echo ic* >> symsrv.ini

Outmask - это глобальная обстановка

PYKD установить собственную выходную маску:

 client->GetOutputMask(&oldMask);  
 client->SetOutputMask(DEBUG_OUTPUT_NORMAL|DEBUG_OUTPUT_ERROR|DEBUG_OUTPUT_WARNING|DEBUG_OUTPUT_DEBUGGEE );
Другие вопросы по тегам