【发布时间】:2022-08-09 09:54:21
【问题描述】:
我正在使用 ETW 来跟踪我正在开发的一些自定义应用程序(用 C++ 编写)的事件。提供者是基于清单的提供者。 在一些测试会话期间,我看到一些事件丢失了,调试时,我发现 EventWrite 方法返回错误 ERROR_MORE_DATA ,如Windows Doc Page 中定义的那样意味着
会话缓冲区大小对于事件来说太小了
查看this page 似乎可以定义
bufferSize属性。使用这些信息,我更新了清单:旧清单
<provider name=\"IconisTrace-IFMO\" guid=\"{038CA124-E20D-4c13-BC62-F158E89222EA}\" symbol=\"TraceIconisTraceIFMO\" resourceFileName=\"_ICONIS_PATH\\ICONIS\\Bin\\IcATSR_Trace_ResOffline.dll\" messageFileName=\"_ICONIS_PATH\\ICONIS\\Bin\\IcATSR_Trace_ResOffline.dll\" message=\"$(string.Provider.Name.IFMO)\"> <events> <event keywords=\"Error\" value=\"1\" version=\"0\" level=\"win:Error\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> <event keywords=\"Warning\" value=\"2\" version=\"0\" level=\"win:Warning\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> <event keywords=\"Functional\" value=\"3\" version=\"0\" level=\"win:Informational\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> <event keywords=\"Informative\" value=\"4\" version=\"0\" level=\"win:Verbose\" template=\"template_function_trace\" channel=\"c1\" message=\"$(string.Event.String)\"/> <event keywords=\"Begin\" value=\"5\" version=\"0\" level=\"win:Verbose\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> <event keywords=\"Exit\" value=\"6\" version=\"0\" level=\"win:Verbose\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> <event keywords=\"Debug\" value=\"7\" version=\"0\" level=\"win:Verbose\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> <event keywords=\"_S2KTrace\" value=\"8\" version=\"0\" level=\"win:Verbose\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> <event keywords=\"Performance\" value=\"9\" version=\"0\" level=\"win:Verbose\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> </events> <levels> </levels> <tasks> <task name=\"IFMO\" symbol=\"IFMOTracingEntry\" value=\"3\" eventGUID=\"{2AAB6C5E-4FCC-493d-9606-E430DFEEB829}\"> </task> </tasks> <opcodes> </opcodes> <keywords> <keyword name=\"Error\" mask=\"0x1\" message=\"$(string.Keyword.Error)\"/> <keyword name=\"Warning\" mask=\"0x2\" message=\"$(string.Keyword.Warning)\"/> <keyword name=\"Functional\" mask=\"0x4\" message=\"$(string.Keyword.Functional)\"/> <keyword name=\"Informative\" mask=\"0x8\" message=\"$(string.Keyword.Informative)\"/> <keyword name=\"Begin\" mask=\"0x10\" message=\"$(string.Keyword.Begin)\"/> <keyword name=\"Exit\" mask=\"0x20\" message=\"$(string.Keyword.Exit)\"/> <keyword name=\"Debug\" mask=\"0x40\" message=\"$(string.Keyword.Debug)\"/> <keyword name=\"_S2KTrace\" mask=\"0x80\" message=\"$(string.Keyword._S2KTrace)\"/> <keyword name=\"Performance\" mask=\"0x100\" message=\"$(string.Keyword.Performance)\"/> </keywords> <templates> <template tid=\"template_function_trace\"> <data name=\"FileName\" inType=\"win:UnicodeString\" outType=\"xs:string\"/> <data name=\"LineNum\" inType=\"win:Int32\" outType=\"xs:int\"/> <data name=\"OutputString\" inType=\"win:UnicodeString\" outType=\"xs:string\"/> </template> </templates> </provider>新清单
<provider name=\"IconisTrace-IFMO\" guid=\"{038CA124-E20D-4c13-BC62-F158E89222EA}\" symbol=\"TraceIconisTraceIFMO\" resourceFileName=\"_ICONIS_PATH\\ICONIS\\Bin\\IcATSR_Trace_ResOffline.dll\" messageFileName=\"_ICONIS_PATH\\ICONIS\\Bin\\IcATSR_Trace_ResOffline.dll\" message=\"$(string.Provider.Name.IFMO)\"> <channels> <channel name=\"IconisTrace-IFMO/Operational\" chid=\"c1\" type=\"Operational\" enabled=\"true\"> <publishing> <bufferSize>0x80</bufferSize> </publishing> </channel> </channels> <events> <event keywords=\"Error\" value=\"1\" version=\"0\" level=\"win:Error\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> <event keywords=\"Warning\" value=\"2\" version=\"0\" level=\"win:Warning\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> <event keywords=\"Functional\" value=\"3\" version=\"0\" level=\"win:Informational\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> <event keywords=\"Informative\" value=\"4\" version=\"0\" level=\"win:Verbose\" template=\"template_function_trace\" channel=\"c1\" message=\"$(string.Event.String)\"/> <event keywords=\"Begin\" value=\"5\" version=\"0\" level=\"win:Verbose\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> <event keywords=\"Exit\" value=\"6\" version=\"0\" level=\"win:Verbose\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> <event keywords=\"Debug\" value=\"7\" version=\"0\" level=\"win:Verbose\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> <event keywords=\"_S2KTrace\" value=\"8\" version=\"0\" level=\"win:Verbose\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> <event keywords=\"Performance\" value=\"9\" version=\"0\" level=\"win:Verbose\" template=\"template_function_trace\" message=\"$(string.Event.String)\"/> </events> <levels> </levels> <tasks> <task name=\"IFMO\" symbol=\"IFMOTracingEntry\" value=\"3\" eventGUID=\"{2AAB6C5E-4FCC-493d-9606-E430DFEEB829}\"> </task> </tasks> <opcodes> </opcodes> <keywords> <keyword name=\"Error\" mask=\"0x1\" message=\"$(string.Keyword.Error)\"/> <keyword name=\"Warning\" mask=\"0x2\" message=\"$(string.Keyword.Warning)\"/> <keyword name=\"Functional\" mask=\"0x4\" message=\"$(string.Keyword.Functional)\"/> <keyword name=\"Informative\" mask=\"0x8\" message=\"$(string.Keyword.Informative)\"/> <keyword name=\"Begin\" mask=\"0x10\" message=\"$(string.Keyword.Begin)\"/> <keyword name=\"Exit\" mask=\"0x20\" message=\"$(string.Keyword.Exit)\"/> <keyword name=\"Debug\" mask=\"0x40\" message=\"$(string.Keyword.Debug)\"/> <keyword name=\"_S2KTrace\" mask=\"0x80\" message=\"$(string.Keyword._S2KTrace)\"/> <keyword name=\"Performance\" mask=\"0x100\" message=\"$(string.Keyword.Performance)\"/> </keywords> <templates> <template tid=\"template_function_trace\"> <data name=\"FileName\" inType=\"win:UnicodeString\" outType=\"xs:string\"/> <data name=\"LineNum\" inType=\"win:Int32\" outType=\"xs:int\"/> <data name=\"OutputString\" inType=\"win:UnicodeString\" outType=\"xs:string\"/> </template> </templates> </provider>两个版本之间的区别在于,在 NEW MANIFEST 中我添加了以下元素:
<channels> <channel name=\"Alstom-Iconis-IconisTrace-IFMO/Operational\" chid=\"c1\" type=\"Operational\" enabled=\"true\"> <publishing> <bufferSize>0x80</bufferSize> </publishing> </channel> </channels>并在
<event keywords=\"Informative\" value=\"4\"...行中添加了属性channel=\"c1\"不幸的是,我仍然继续遇到同样的错误。
这里的问题:
- 这种变化有意义吗?这是面对这个问题的正确方法吗?我有一些疑问,因为在this doc page 中有一条注释说:
[!Note] 无论缓冲区大小如何,ETW 都无法收集大于 64KB 的事件。
- 使用命令
mc.exe -um OfflineProviders.man正确编译了manifest并生成了几个文件;但是当我尝试使用wevtutil.exe im OfflineProviders.man注册清单时,我收到以下错误通道属性 BufferSize 的值包含无效值。参数不正确。
为什么我会收到此错误?该错误是否解释了为什么我仍然会继续丢失事件?
标签: windows buffer etw wevtutil