我正在使用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
相关的问题)
答案 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是全局设置
答案 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字符的消息)。
我已经测试了这种方法,并且可以确认它工作正常。
感谢您的帮助。