如何摆脱与符号文件相关的 warning/error 消息
How to get rid of symbol file related warning/error messages
我正在调试转储文件,使用 Windbg
,我经常收到 warning/error 消息,如下所示:
*** 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
但是 warning/error 消息不断到达。
第一次回复后编辑(第二次编辑确认)
我尝试过几次,使用 .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
文件而言:我的电脑上没有这个文件,老实说,我不想搜索每个可能导致符号加载问题的模块。我只想避免提到的 warning/error 消息。
对问题有更多了解后编辑
我还没有提到的一件事是 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
issue? (我在 PYKD
issues homepage 上没有看到任何 .outmask
相关问题)
您可以使用 .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 与 [exclusions] 部分
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 );
到目前为止,我的问题有两个答案:
- 屏蔽一般
Windbg
命令输出
- Outmasking
PYKD
命令输出
我不能使用一般的 Windbg
outmasking,因为我正在使用 PYKD
命令。
我不能使用 PYKD
outmasking,因为我只是启动(数千个)PYKD
命令,这些命令每次都会打开和关闭一个单独的 PYKD
会话,并配置PYKD
outmask 会大大降低我的应用程序速度。
因此我决定采用另一种方法:我将确保 PYKD
输出消息的格式非常具体(它将始终包含一个 TAB 字符),而不是不使用错误消息,我将决定只使用 PYKD
消息(包含 TAB 字符的消息)。
我已经测试了这种方法,我可以确认它工作正常。
感谢您的帮助。
我正在调试转储文件,使用 Windbg
,我经常收到 warning/error 消息,如下所示:
*** 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
但是 warning/error 消息不断到达。
第一次回复后编辑(第二次编辑确认)
我尝试过几次,使用 .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
文件而言:我的电脑上没有这个文件,老实说,我不想搜索每个可能导致符号加载问题的模块。我只想避免提到的 warning/error 消息。
对问题有更多了解后编辑
我还没有提到的一件事是 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
issue? (我在 PYKD
issues homepage 上没有看到任何 .outmask
相关问题)
您可以使用 .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 与 [exclusions] 部分
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 );
到目前为止,我的问题有两个答案:
- 屏蔽一般
Windbg
命令输出 - Outmasking
PYKD
命令输出
我不能使用一般的 Windbg
outmasking,因为我正在使用 PYKD
命令。
我不能使用 PYKD
outmasking,因为我只是启动(数千个)PYKD
命令,这些命令每次都会打开和关闭一个单独的 PYKD
会话,并配置PYKD
outmask 会大大降低我的应用程序速度。
因此我决定采用另一种方法:我将确保 PYKD
输出消息的格式非常具体(它将始终包含一个 TAB 字符),而不是不使用错误消息,我将决定只使用 PYKD
消息(包含 TAB 字符的消息)。
我已经测试了这种方法,我可以确认它工作正常。
感谢您的帮助。