日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

ETW (Event Tracing for Windows)介绍

發布時間:2024/8/26 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 ETW (Event Tracing for Windows)介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ETW主要包括3個component:Controller, Provider, and Consumer.

Controller的主要任務有兩個:

一是,用StartTrace在內存中創建一個event trace session。剛創建時,這個session是沒有跟任何provider關聯的,也就不會任何數據被寫到這個session的buffer中,,當然這一步也是可以完成關聯的,那就是把StartTrace的參數Wnode.Guid member of Properties設置為provider id.問題:(Wnode.Guid什么時候應該設置,應該設置為什么值??)

二是,啟動(API: EnableTrace)和停止(API: ControlTrace)Provider(它是使用Provider的GUID來區分不同的provider的)。Controller的第二個任務就是為了避免額外的開銷,Provider不會一直都在工作,只有當被Enable的時候,才開始工作(注:其實這么說是不正確的,Provider其實是不必受Controller控制的,它可以隨時隨地發送trace,只要它知道那個event trace session的句柄,這完全取決于Provider具體是怎么寫的。但在實際操作上,Provider都是根據Controller的Enable/Disable信號來啟動和停止tracing的。)問題: Provider如何知道Session的Handle呢?

第二個是Consumer,Consumer主要做這幾件事:

1. 用OpenTrace打開和event trace session之間的通道。

2. 設計event trace callback,你可以設計一個generic的callback用來handle所有的event trace,不管是不是你感興趣的。你也可以為特定的event trace設計callback,專門處理你關心的trace。Generic的callback實在OpenTrace的時候在參數中指定的,而特定的callback可以用SetTraceCallback來注冊。

3. 調用ProcessTrace,開始處理Trace。注意,這里有一個很tricky的地方:ProcessTrace是block的!就是說ProcessTrace不會返回,除非Controller結束這個session或者Consumer自己調用CloseTrace(注:CloseTrace只有在Longhorn可以使ProcessTrace返回,XP不行)。呵呵,那你問了,ProcessTrace都不返回,我的Consumer還怎么調用CloseTrace啊?答案很簡單:你需要第二個線程,那個線程什么也沒干,就調用了ProcessTrace,然后它就待在那里,直到Consumer的主線程調用CloseTrace或者Controller關閉了整個session。我知道這個方法很奇怪,但,不要問我,這是ETW team給我的答案,他們肯定有他們的考慮。

Reference: http://msdn.microsoft.com/en-us/magazine/cc163437.aspx

總結

以上是生活随笔為你收集整理的ETW (Event Tracing for Windows)介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。