如何摆脱与符号文件有关的警告/错误消息

时间:2019-01-25 14:06:15

标签: windbg symbols dump pykd

我正在使用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问题? (我没有在PYKD issues homepage上看到任何与.outmask相关的问题)

3 个答案:

答案 0 :(得分:2)

您可以使用 .outmask-6
禁止显示错误/警告消息 或使用 .outmask-206 禁止显示结尾的symsrv摘要和警告消息

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

使用此功能时要小心,一些重要的错误消息也可能会被抑制

如果您是要停止symsrv来访问ms符号服务器并浪费时间

使用[exclusions]部分设置symsrv.ini

cd windbg installation path

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

outmask是全局设置

enter image description here

答案 1 :(得分:0)

PYKD设置自己的输出掩码:

 client->GetOutputMask(&oldMask);  
 client->SetOutputMask(DEBUG_OUTPUT_NORMAL|DEBUG_OUTPUT_ERROR|DEBUG_OUTPUT_WARNING|DEBUG_OUTPUT_DEBUGGEE );

答案 2 :(得分:0)

到目前为止,我的问题有两个答案:

  • 掩盖常规Windbg命令输出
  • 屏蔽PYKD命令输出

我无法使用常规的Windbg遮罩,因为我正在使用PYKD命令。
我不能使用PYKD屏蔽,因为我只是启动(数千个)PYKD命令,这些命令每次都打开和关闭一个单独的PYKD会话,并进行配置PYKD外罩会大大减慢我的应用程序的速度。

因此,我决定采用另一种方法:我将确保PYKD输出消息的格式是如此具体(它将始终包含TAB字符),而不是不使用错误。消息,我将决定只使用PYKD消息(包含TAB字符的消息)。

我已经测试了这种方法,并且可以确认它工作正常。

感谢您的帮助。