关于ETW的心得

来源:互联网 发布:淘宝客服可爱的欢迎语 编辑:程序博客网 时间:2024/04/29 22:31

1. 注册manifest文件时,provider属性resourceFileName及messageFileName指向的exe或者dll文件必须存在,否则注册失败

2. exe或者dll文件不允许改名,否则生成etl文件时无法解析数据模板中数据

3. xperf不在解析事件中的数据区域,在安装manifest或者没有安装的计算机上都显示同样的数据

4. 自定义事件中的左侧列中若有Field(%n)字段,说明已经解析出自定义数据,单件某行时,列Field(%n)会自动变为定义的列名。

5. manifest中的symbol属性供生成头文件时使用,测试结果为若当前的本地化与清单文件不符合,则将其解析为Name的属性值,例如

<opcodes>
     <opcode name="Entry" symbol="_opcode_entry_function" value="10" message="$(string.Function-Entry-Exit-Provider.opcode._opcode_entry_function.message)">
     </opcode>

------------------

<localization>
  <resources culture="en-US">
   <stringTable>
    <string id="level.Informational" value="Information">
    </string>
    <string id="level.Error" value="Error">
    </string>
    <string id="Function-Entry-Exit-Provider.opcode._opcode_exit_function.message" value="This opcode describes function exit points">

ETL文件opcode name显示的是Entry,也不对,再研究,弄清楚message属性的含义

 

6. event message属性会在Event viewer中使用,若事件没有message属性,则event viewer会报告错误

7. 若模板有userData元素,则event viewer中的详细信息只显示UserData元素,不会显示模板的其它元素,若没有UserData元素,则显示模板的所以定义元素。

8. 可以在多个程序中注册同一个Provider并写事件

9. dll中可以保护etw provider的所有功能

10. 若没有与Kernel Logger Session一并输出etl文件,则xperf中task name及opcode name显示的是localization定义的message值。若一并输出,则显示的是task及opcode的Name属性。(可以再测测加入culture属性为zh-CN时是否显示message值)

11. 从event viewer中可以看到写到channel中的message有字符串换行的功能,最初以为在message字符串本地化中插入换行符,例如

<string id="Event.WhenToTransfer" value="The %2 transfer will occur %3."/>

以为在value中插入换行符会在viewer中显示出换行来,但是没有。后来发现写到Microsoft-Windows-WinINet/Analytic channel中的message也换行并且看了下message的定义(如何查看请参考http://blogs.msdn.com/ntdebugging/archive/2009/09/08/exploring-and-decoding-etw-providers-using-event-log-channels.aspx),原来是某个字符串有换行符,在viewer中就可以看到,例如<string id="Event.WhenToTransfer" value="The %2 transfer will occur %3."/>中若%2是个字符并换行,则可以在viewer中看到换行符,增加可读性。

0 0
原创粉丝点击