为Pony添加ETW支持

Pony最近支持了DTrace,功能非常强大,Windows下类似的动态跟踪工具还不成熟,最接近的NTrace还是没开放的研究项目。

退而求其次,我为尝试给Pony加了ETW(Event Tracing for Windows)支持(分支etw-tracelogging)。ETW其实更像是高性能的日志而不是动态跟踪,虽然也能拿到堆栈,但是性能、灵活性、安全性都差DTrace很多。实现方法也比较简单,就是把原来DTrace宏换成TraceLogging API调用。

在Windows Performance Analyzer查看事件

TraceLogging使用简介

ETW在Windows 10后提供了TraceLogging API,底层还是ETW,但是极大地简化了使用:

  1. 声明Provider

    通常在一个头文件里声明,然后在需要的模块里引用:

    #include <TraceLoggingProvider.h>
    TRACELOGGING_DECLARE_PROVIDER(etw_provider);
  2. 定义Provider

    在C/C++源文件里进行定义,需要上一步的表示符,Provider的名字和一个GUID。

    TRACELOGGING_DEFINE_PROVIDER(
      etw_provider,
      "Pony",
      (0x9d12063d, 0xc320, 0x4bee, 0x8f, 0x5f, 0x1a, 0x1d, 0xb5, 0x49, 0x52, 0x20)
    );
  3. 注册Provider

    通常在程序开始时注册Provider

    TraceLoggingRegister(etw_provider);
  4. 写事件

    TraceLogging提供了很多来方便写事件,基本使用:

    TraceLoggingWrite(etw_provider, "EventName", 
      TraceLoggingUIntPtr(ptr, "Data1"),
      TraceLoggingFloat32(f1,  "Data2"));

    前两个参数provider和事件名是必填的,后面的可变参数可以填各种基础数据类型,还支持结构体、数组。

  5. 注销Provider

    在程序结束的时候注销Provider

    TraceLoggingUnregister(etw_provider);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值