仅针对提供程序中的某些特定 ETW 任务激活堆栈?

2023-11-21

从 Windows 7 开始,可以为用户模式事件激活调用堆栈。这工作得很好,但有时不需要为提供者中的所有任务/事件激活堆栈,最好只为某些特定任务激活堆栈。这可能吗?


是的,从 Windows 8.1 开始,这是可能的,其中的类型条目_EVENT_FILTER_DESCRIPTOR当它设置为EVENT_FILTER_TYPE_STACKWALK当您调用 EnableTraceEx2 时。

在 Windows 8.1、Windows Server 2012 R2 及更高版本上,事件负载, EnableTraceEx2 可以使用作用域和堆栈遍历过滤器 函数以及 ENABLE_TRACE_PARAMETERS 和 EVENT_FILTER_DESCRIPTOR 用于过滤记录器会话中特定条件的结构。

当为提供者启用堆栈遍历时,堆栈将是 捕获提供者生成的所有事件。大部分的 有时,用户只对特定数量的堆栈感兴趣 事件。

此功能允许启用或禁用列表上的堆栈遍历 事件。提供的过滤器包含 EVENT_FILTER_EVENT_ID 结构 包含事件 ID 数组和指示的布尔值 是否启用或禁用指定事件的堆栈捕获。 每个事件写入调用都会快速浏览该数组以找出答案 是否应该捕获堆栈。

With Windows 性能记录器有可能实现这一目标WPR简介第二个事件收集器ID条目有一个事件提供者启用 stackwalking 的条目。

在此演示配置文件中,我创建了一个 EventProvider (EventProvider_DotNETRuntime) 对于提供者Microsoft-Windows-DotNETRuntime没有堆栈来捕获 JIT 和 GC 数据以及其他 EventProvider (EventProvider_DotNETRuntime_Stack) 对于提供者Microsoft-Windows-DotNETRuntime使用堆栈来捕获异常和加载程序事件的堆栈。

<?xml version="1.0" encoding="utf-8"?>
<WindowsPerformanceRecorder Version="1.0" Author="MagicAndre1981" Copyright="MagicAndre1981">
  <Profiles>
    <SystemCollector Id="SystemCollector" Name="NT Kernel Logger">
      <BufferSize Value="1024" />
      <Buffers Value="384" />
    </SystemCollector>
    <EventCollector Id="EventCollector_DotNETRuntime_Session" Name="DotNETRuntime_Session">
      <BufferSize Value="1024" />
      <Buffers Value="128" />
    </EventCollector>
    <EventCollector Id="EventCollector_DotNETRuntime_with_Stack" Name="DotNETRuntime_Session_with_Stack">
      <BufferSize Value="1024" />
      <Buffers Value="128" />
    </EventCollector>
    <SystemProvider Id="SystemProvider">
      <Keywords>
        <Keyword Value="ProcessThread" />       <!--PROC_THREAD-->
        <Keyword Value="Loader" />              <!--LOADER-->
        <Keyword Value="SampledProfile" />      <!--PROFILE-->
        <Keyword Value="Interrupt"/>            <!--INTERRUPT-->
        <Keyword Value="DPC"/>                  <!--DPC-->
        <Keyword Value="ReadyThread" />         <!--Dispatcher-->
        <Keyword Value="CSwitch" />             <!--CSwitch-->
      </Keywords>
      <Stacks>
        <Stack Value="SampledProfile" />        <!--Profile-->
        <Stack Value="CSwitch" />               <!--CSwitch-->
        <Stack Value="ReadyThread" />           <!--ReadyThread-->
        <Stack Value="ImageLoad" />             <!--ImageLoad-->
        <Stack Value="ImageUnload" />           <!--ImageUnload-->
      </Stacks>
    </SystemProvider>
    <EventProvider Id="EventProvider_DotNETRuntime" Name="Microsoft-Windows-DotNETRuntime" Level="5" Stack="false">
      <Keywords>
        <Keyword Value="0x111" />                       <!--GCKeyword, JitKeyword, JitRundownKeyword, EndRundownKeyword -->
      </Keywords>
    </EventProvider>
    <EventProvider Id="EventProvider_DotNETRuntime_Stack" Name="Microsoft-Windows-DotNETRuntime" Level="5" Stack="true">
      <Keywords>
        <Keyword Value="0x8008" />                      <!--LoaderKeyword, LoaderRundownKeyword, ExceptionKeyword -->
      </Keywords>
    </EventProvider>
    <EventProvider Id="EventProvider_DotNETRuntimePrivate" Name="763fd754-7086-4dfe-95eb-c01a46faf4ca" Level="5" Stack="false">
      <Keywords>
        <Keyword Value="0xE" />
      </Keywords>
    </EventProvider>
    <EventProvider Id="EventProvider_DotNETRuntimeRundown_CaptureState" Name="Microsoft-Windows-DotNETRuntimeRundown" Level="5" CaptureStateOnly="true" Stack="false">
      <CaptureStateOnSave>
        <Keyword Value="0x118" />
      </CaptureStateOnSave>
    </EventProvider>
    <Profile Id="DotNetRuntimeProfile.Verbose.File" Name="DotNetRuntimeProfile" Description="DotNetRuntime Profile" LoggingMode="File" DetailLevel="Verbose">
      <Collectors>
        <SystemCollectorId Value="SystemCollector">
          <SystemProviderId Value="SystemProvider" />
        </SystemCollectorId>
        <EventCollectorId Value="EventCollector_DotNETRuntime_Session">
          <EventProviders>
            <EventProviderId Value="EventProvider_DotNETRuntime" />
            <EventProviderId Value="EventProvider_DotNETRuntimePrivate" />
            <EventProviderId Value="EventProvider_DotNETRuntimeRundown_CaptureState" />
          </EventProviders>
        </EventCollectorId>
        <EventCollectorId Value="EventCollector_DotNETRuntime_with_Stack">
          <EventProviders>
            <EventProviderId Value="EventProvider_DotNETRuntime_Stack" />
          </EventProviders>
        </EventCollectorId>
      </Collectors>
    </Profile>
    <Profile Id="DotNetRuntimeProfile.Verbose.Memory" Name="DotNetRuntimeProfile" Description="DotNetRuntime Profile" Base="DotNetRuntimeProfile.Verbose.File" LoggingMode="Memory" DetailLevel="Verbose"/>
  </Profiles>
  <TraceMergeProperties>
    <TraceMergeProperty Id="BaseVerboseTraceMergeProperties" Name="BaseTraceMergeProperties" Base="">
      <CustomEvents>
          <CustomEvent Value="ImageId"/>
          <CustomEvent Value="BuildInfo"/>
          <CustomEvent Value="VolumeMapping"/>
          <CustomEvent Value="EventMetadata"/>
          <CustomEvent Value="PerfTrackMetadata"/>
          <CustomEvent Value="NetworkInterface"/>
        </CustomEvents>
      <FileCompression Value="true" />
     </TraceMergeProperty>
  </TraceMergeProperties>
</WindowsPerformanceRecorder>

当您现在运行 Windows Performance Recorder 来捕获数据时:

"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\wpr.exe" -start  DotNetRuntime.wprp

,停止录音

"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\wpr.exe" -stop Result.etl

打开跟踪Windows 性能分析器, 加载调试符号您可以看到异常数据的堆栈,但看不到 Jit 或 GC 事件的堆栈:

WPA_dotNetRuntime_Events_some_withStacks

注意力。当您在 Windows 7 或 Windows 8(内部版本 9200)下运行此程序时,提供程序的最后一个 EventLogger 将与指定的关键字和堆栈选项一起使用。在这里,您应该创建 2 个 WPRP 配置文件并检测 Windows 版本并运行正确的配置文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅针对提供程序中的某些特定 ETW 任务激活堆栈? 的相关文章

  • w8 默认平板电脑设置与 WPF 布局冲突

    我有一个 WPF 桌面应用程序 我收到 W8 用户的报告 称我们应用程序中的代码完成窗口未正确对齐 我调查发现它是W8平板电脑设置中的一个设置与wpf中弹出窗口的位置冲突 Default is right handed and then t
  • 无法安装 Windows 版 GitHub

    当我尝试为 Windows 安装 github 时收到此错误 Application cannot be started Contact the application vendor 错误日志产生了这样的结果 PLATFORM VERSIO
  • 获取Windows事件提供者信息

    我想使用 Windows PowerShell 检索有关事件提供程序的信息 我正在运行带有 PowerShell 版本 4 0 的 Windows 8 1 并且我注意到有一些 NET 类System Diagnostics Eventing
  • Java 线程转储总结工具

    我有时必须查看 Tomcat 服务器的线程转储 然而 这是一个非常慢的过程 因为我的应用程序使用具有数百个线程的线程池 我查看的大多数线程转储都包含许多线程的相同堆栈跟踪 因为它们处于空闲等待工作状态 是否有任何工具可以解析线程转储并仅向我
  • Stacktrace Java Eclipse 中的未知来源

    我有一个非常烦人的问题 当在 Eclipse 中从源代码中导出 jar 文件时 我不会在堆栈跟踪中获得有关发生错误的源代码和行号的信息 我已经检查了 ecplise 中项目的编译器设置 并且设置了类文件生成部分中的所有选项 我正在为 Min
  • 如何在 Visual Studio Express 中查看异常详细信息?

    How do you view exception details such as messages and stack traces in VS Express 2012 I am using Visual Studio Express
  • 我们如何跟踪 Javascript 错误?现有的工具真的有用吗?

    今天我发现需要跟踪和检索 Javascript 错误堆栈跟踪来解决这些问题 今天 我们能够捕获所有其余调用 其想法是 一旦出现错误 就会自动发布该错误的堆栈跟踪以及其余保存的服务的响应 以便我们可以以几乎相同的方式检测 重现和解决问题环境
  • ADB 驱动程序和 Windows 8.1

    我浪费了很多时间试图在 Windows 8 1 中为我的平板电脑成功安装 ADB 驱动程序 所以在这里我将发布我所做的 以防有人遇到同样的问题 UPDATE 发布图片 英文版 https ivanrf com en adb driver a
  • 如何以编程方式从父进程获取子进程的堆栈跟踪?

    假设我在程序中派生了一个子进程 在某个时候 我暂停子进程kill child SIGSTOP 并想要检查堆栈的内容 有没有办法以编程方式从父进程获取子进程的堆栈跟踪 我知道ptrace是跟踪子进程并检查其内存 寄存器的标准方法 我也知道ba
  • React Native 堆栈跟踪

    I have React Native App与 Firebase Crashlytics 关联 问题是 firebase 发送不可读的堆栈跟踪 如下所示 有任何方法可以读取此类错误 我只想知道什么时候抛出错误 这是我的堆栈跟踪 致命异常
  • ssl 证书代码异常

    我与 sslStream 建立了客户端服务器套接字连接 但当代码到达行时 服务器上出现异常作为服务器进行身份验证我在互联网上搜索 但找不到为什么会发生这种情况的好答案 我在项目中创建了 pfx 测试文件 并为其设置了一个简单的密码 我不知道
  • ImportError:没有名为“matplotlib.pyplot”的模块; matplotlib 不是一个包

    我正在尝试使用 matplotlib 对心电图信号进行实时分析 但问题甚至在此之前就开始了 我使用 PyCharm IDE 目前使用 Python 3 3 我的操作系统是 Windows 8 1 对于 Matplotlib 我从这里下载了
  • Google Play 控制台堆栈跟踪

    在 Google Play Console 中 我收到以下异常跟踪 虽然我添加了反混淆文件 但行号显示为 0 java lang NullPointerException at com ae apps common managers Con
  • 在 Windows 8.1 平板电脑上的 Web 应用程序中捕获图像

    我即将开发一个在 Windows 8 1 平板电脑上运行的应用程序 一个重要的功能是能够单击按钮来访问相机来拍摄一些照片 理想情况下 我想将其创建为Web应用程序由于多种原因 许可证 跨平台 开发时间 没有本机应用程序经验等 而不是本机应用
  • 如何在非调试模式下获取 Adob​​e AIR 全局运行时错误的堆栈跟踪?

    新版本的AIR使我们能够全局捕获运行时错误并处理它们 问题是 除了错误 ID 错误消息和名称之外 它没有堆栈跟踪或任何有关错误的有用信息 例如 它可能告诉我发生了空指针异常 但它不会告诉我在哪里 哪个方法或任何事情 运行时的调试版本为我们提
  • 如果一个线程调用 getStackTrace() 并且 lambda 定义(通过 Unsafe.defineAnonymousClass)发生在另一线程中,则 Java8 挂起

    我的 Web 应用程序在 Apache Tomcat 8 0 21 JVM 1 8 0 45 b15 和 Windows Server 2012 上运行 运行在 16 核 32 个带 HT 双 Xeon NUMA 计算机上 在某些非常不幸的
  • Windows 8中有没有特殊的API来挂载ISO文件?

    您可能知道 Windows 资源管理器允许将 ISO 文件装载到虚拟驱动器 有没有任何API可以用来做到这一点 本机函数调用AttachVirtualDisk https msdn microsoft com en us library w
  • 为什么无论 -rdynamic 如何,backtrace 都不包含 Objective-C 符号?

    Update 我正在 Linux 上使用 GNU 运行时 问题是not发生在带有 Apple 运行时的 MacOS 上 更新2 我在 MacOS 上编译了 GNU 运行时并用它构建了示例 该错误确实not发生在带有 GNU 运行时的 Mac
  • 利用源映射的堆栈跟踪

    概述 浏览器控制台中的堆栈跟踪输出与调用 Error stack 时返回的跟踪不同 控制台堆栈跟踪似乎考虑了源映射 而 Error stack 堆栈跟踪则没有 控制台输出这是输出到控制台的默认堆栈跟踪 Uncaught TypeError
  • 堆栈跟踪方法名称经过编辑

    当我的应用程序在他们的设备上崩溃时 用户会通过电子邮件向我发送堆栈跟踪信息 在 iOS 6 之前 它们看起来像这样 CRASH NSInvalidArgumentException NSArrayM insertObject atIndex

随机推荐

  • UTF-8 字符的 Html2canvas 图像捕获问题

    我想捕获我的网页 为此我找到了 html2canvas 当我如下所示使用时 我的 UTF 8 波斯语 字符遇到麻烦 并且这个方向被破坏 如您所见 HTML div span span div JavaScript document read
  • 如何让 kestrel Web 服务器监听非本地主机请求?

    我已将我的 c asp net 5 mvc 6 应用程序部署到 Windows 2008 服务器 我已经火力全开dnx web它正在侦听端口 5000 并且从本地计算机访问时工作正常 如何让它监听非本地主机请求 附 这question与此不
  • 如何实现一个工厂有多个交换机?

    我想实现一个工厂函数来创建对象 我的对象模板如下所示 template
  • 如何在 C 中实现循环缓冲区?

    我需要一个固定大小 在创建时可以在运行时选择 而不是编译时选择 的循环缓冲区 它可以容纳任何类型的对象 并且需要very高性能 我认为不会出现资源争用问题 因为尽管它处于多任务嵌入式环境中 但它是一个合作环境 因此任务本身可以管理它 我最初
  • XSLT:循环一次选择两个元素

    我有一堆 xml 文档 作者选择在其中表示一组笛卡尔点 如下所示
  • 如何读取正在使用的文件? [复制]

    这个问题在这里已经有答案了 我有一个小问题 我有一个应该每天解析日志文件的工具 不幸的是这个日志文件正在被写入日志的进程使用 我无法阻止它 第一次尝试是创建该文件的副本 但这也不起作用 有什么方法可以让我读取日志文件的当前文本 即使它已经在
  • RPM 有条件 可能需要在规格文件中

    正如主题所读 我想知道是否可以在 RPM 规范文件中使所需的包依赖于某个条件 例如 如果在安装目标上 则检查 shell 语句 例如主机正在使用绑定接口 并且仅当要求生效时 作为您最初问题的答案 是的 这是可能的 但是您可以实现的内容取决于
  • 设置图像最大尺寸

    我需要设置图像的最大高度和宽度 img 标签 例如 最大尺寸为 400x400 px 因此如果图像尺寸小于此尺寸 则它将按原样显示图像 如果尺寸大于此尺寸 则应将其压缩到此尺寸 我怎样才能在 html 或 javascript 中做到这一点
  • 在 rake 任务中打印到屏幕

    我有一个长时间运行的 rake 任务 我时不时地在屏幕上打印更新 让我知道任务已经完成了多少 puts Almost there 我的问题是所有的 put 语句似乎都缓冲在某处 并且在任务完成之前不会打印到屏幕上 此时 它们将被一次性打印出
  • android listview 滚动后显示错误数据(自定义适配器)

    我有一个奇怪的问题让我发疯 在我的 android 应用程序中 我定制了自己的从 ArrayAdapter 扩展的适配器 我添加适配器的 ListView 的项目可以是标记文本 不可编辑 可编辑文本或微调器 疯狂的是 当我滚动 ListVi
  • 移动语义不完整吗?

    在复制效率低下的情况下 移动语义会取代复制语义 复制语义完全处理可复制对象 包括 const 对象 C 11 中已经存在大量不可复制的对象 例如 std unique ptr 这些对象完全依赖于移动语义 因为从对象移动允许使其无效 这对于像
  • 错误:向量内存已耗尽(达到限制?)

    我之前保存了一个 2 8G RData 文件 现在我尝试加载它 以便我可以再次处理它 但奇怪的是 我不能 它给出了错误 错误 向量内存已耗尽 达到限制 这很奇怪 因为我之前工作得很好 但改变的一件事是我升级到了最新版本的 R 3 5 0 我
  • 413 请求实体太大 - Web API

    我在尝试将数据从 Web 应用程序 netfx 4 6 1 发送到我的 Web api net core 3 1 时遇到 413 问题 在下面的代码中 我发送了一个列表 其中包含图像的字节数据以及构建文件所需的附加数据 预期输出是返回包含新
  • 使用 annotate 将粗体女性符号添加到 ggplot2

    我正在尝试在我的情节中使用女性符号 它非常微弱 嗯 在我的实际图表上看起来很微弱 所以我希望将其变成粗体 df lt data frame x c 0 1 y c 0 1 ggplot df aes x y geom point theme
  • Heroku 和 ip 掩码

    我正在构建一个购物网站 该网站使用允许信用卡付款的服务 tranzilla 该服务需要一个 IP 或 IP 掩码 以便允许请求 通过套接字 问题是我使用 heroku 作为托管 它是去中心化的 有什么办法可以做到这一点吗 除了购买自定义 s
  • Python:有条件地从列表中删除元素

    假设我有一个元组列表 x 1 2 3 4 7 4 5 4 在共享第二个元素的所有元组中 我想保留具有最大第一个元素的元组 y 1 2 7 4 在 Python 中实现这一目标的最佳方法是什么 感谢您的回答 如果有区别的话 元组可以是二元素列
  • 如何在 Android 上切换夜间模式和白天模式主题? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我想使用 设置 共享首选项 在 Android 应用程序中设置夜间模式和白天模式主题 如
  • C 和 C++ 中静态变量存储在哪里?

    静态变量存储在可执行文件的哪个段 BSS DATA 其他 中 以便它们不会发生名称冲突 例如 foo c bar c static int foo 1 static int foo 10 void fooTest void barTest
  • 如何使用字符串值代替 WPF 刻度栏上的刻度?

    我希望自定义基本 WPF 的外观TickBar 我想知道是否有一种简单的方法可以使用控件模板来执行此操作 我希望用数字代替刻度栏上的刻度 我希望数字的位置与滑块的值相对应 很像链接中的图片 我四处搜寻 发现一个建议是创建一个继承自的类Tic
  • 仅针对提供程序中的某些特定 ETW 任务激活堆栈?

    从 Windows 7 开始 可以为用户模式事件激活调用堆栈 这工作得很好 但有时不需要为提供者中的所有任务 事件激活堆栈 最好只为某些特定任务激活堆栈 这可能吗 是的 从 Windows 8 1 开始 这是可能的 其中的类型条目 EVEN