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

Я отлаживаю дамп-файлы, используя 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 - 

На мой взгляд, это означает, что объявление объекта PYKD typeInfo() является тем, что отключает команду .outmask() Windbg.

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

Ответы [ 3 ]

0 голосов
/ 28 января 2019

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

 client->GetOutputMask(&oldMask);  
 client->SetOutputMask(DEBUG_OUTPUT_NORMAL|DEBUG_OUTPUT_ERROR|DEBUG_OUTPUT_WARNING|DEBUG_OUTPUT_DEBUGGEE );
0 голосов
/ 27 февраля 2019

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

  • Общая маскировка Windbg вывод команды
  • Outmasking PYKD вывод команды

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

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

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

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

0 голосов
/ 25 января 2019

вы можете подавить сообщения об ошибках / предупреждениях с помощью .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 - это глобальная настройка

enter image description here

...