找不到Win32 TraceLogging的输出

秘书秘书

我试图复制Microsoft提供的TraceLogging的简短示例程序(请参见下文,进行一些细微更改)。我在Visual Studio 2019中完成了``开发''(完全复制)。一切都很好,编译没有问题,运行没有问题,但是在我的PC上我找不到更新的* .etl或* .log文件,也找不到事件查看器中某处的条目。

我仔细阅读了Microsoft文档,并在Internet上搜索了多个小时,但没有任何有用的发现。

我知道我有时会很愚蠢,我必须错过一些显而易见的事情,但这是什么?有什么提示吗?非常感谢!

#include <windows.h> // or <wdm.h> for kernel-mode.
#include <winmeta.h>
#include <TraceLoggingProvider.h>
#include <stdio.h>

// Define the GUID to use in TraceLoggingRegister 
// {5B5852D4-DC24-4A0F-87B6-9115AE9D2768}
TRACELOGGING_DEFINE_PROVIDER (      // defines g_hProvider
    g_hProvider,                    // Name of the provider variable
    "Test-Test",                    // Human-readable name of the provider
    (0x5b5852d4, 0xdc24, 0x4a0f, 0x87, 0xb6, 0x91, 0x15, 0xae, 0x9d, 0x27, 0x68) );     // Provider GUID


int main ( int argc, char *argv[] ) // or DriverEntry for kernel-mode.
{
    HRESULT hrRegister;

    hrRegister = TraceLoggingRegister ( g_hProvider );
    if ( !SUCCEEDED ( hrRegister ) ) {
        printf ( "TraceLoggingRegister failed. Stopping." );
        return 1;
    }
    TraceLoggingWrite (
        g_hProvider,
        "MyEvent1",
        // TraceLoggingChannel ( WINEVENT_CHANNEL_CLASSIC_TRACE ),
        // TraceLoggingLevel ( WINEVENT_LEVEL_CRITICAL ),
        TraceLoggingString ( argv[0], "arg0" ),     // field name is "arg0"
        TraceLoggingInt32 ( argc ) );               // field name is implicitly "argc"

    TraceLoggingUnregister ( g_hProvider );
    return 0;
}
Zhu Song - MSFT

首先,运行此C ++代码将不会生成所需的.log或.etl文件,它只会发送TraceLogging事件,您需要以其他方式捕获它以生成etl文件。

根据MSDN,您有两个步骤来捕获TraceLogging事件:

  1. 使用WPR捕获跟踪数据
  2. 在Windows Phone上捕获TraceLogging事件

首先创建一个.WPRP文件,我使用了与MSDN相同的C ++代码和WPRP文件,如下所示。

测试文件

#include <windows.h> // or <wdm.h> for kernel-mode.
#include <winmeta.h>
#include <TraceLoggingProvider.h>
#include <stdio.h>


    // Define the GUID to use in TraceLoggingProviderRegister 
    // {3970F9cf-2c0c-4f11-b1cc-e3a1e9958833}
TRACELOGGING_DEFINE_PROVIDER(
    g_hMyComponentProvider,
    "SimpleTraceLoggingProvider",
    (0x3970f9cf, 0x2c0c, 0x4f11, 0xb1, 0xcc, 0xe3, 0xa1, 0xe9, 0x95, 0x88, 0x33));


void main()
{

    char sampleValue[] = "Sample value";

    // Register the provider
    TraceLoggingRegister(g_hMyComponentProvider);
    // Log an event
    TraceLoggingWrite(g_hMyComponentProvider, // handle to my provider
        "HelloWorldTestEvent",              // Event Name that should uniquely identify your event.
        TraceLoggingValue(sampleValue, "TestMessage")); // Field for your event in the form of (value, field name).
    // Stop TraceLogging and unregister the provider
    TraceLoggingUnregister(g_hMyComponentProvider);
}

样本WPRP文件

<?xml version="1.0" encoding="utf-8"?>
<!-- TODO: 
1. Find and replace "SimpleTraceLoggingProvider" with the name of your provider.
2. See TODO below to update GUID for your event provider
-->
<WindowsPerformanceRecorder Version="1.0" Author="Microsoft Corporation" Copyright="Microsoft Corporation" Company="Microsoft Corporation">
  <Profiles>
    <EventCollector Id="EventCollector_SimpleTraceLoggingProvider" Name="SimpleTraceLoggingProvider">
      <BufferSize Value="64" />
      <Buffers Value="4" />
    </EventCollector>

    <!-- TODO: 
 1. Update Name attribute in EventProvider xml element with your provider GUID, eg: Name="3970F9cf-2c0c-4f11-b1cc-e3a1e9958833". Or
    if you specify an EventSource C# provider or call TraceLoggingRegister(...) without a GUID, use star (*) before your provider
    name, eg: Name="*MyEventSourceProvider" which will enable your provider appropriately.  
 2. This sample lists one EventProvider xml element and references it in a Profile with EventProviderId xml element. 
    For your component wprp, enable the required number of providers and fix the Profile xml element appropriately
-->
    <EventProvider Id="EventProvider_SimpleTraceLoggingProvider" Name="*SimpleTraceLoggingProvider" />

    <Profile Id="SimpleTraceLoggingProvider.Verbose.File" Name="SimpleTraceLoggingProvider" Description="SimpleTraceLoggingProvider" LoggingMode="File" DetailLevel="Verbose">
      <Collectors>
        <EventCollectorId Value="EventCollector_SimpleTraceLoggingProvider">
          <EventProviders>
            <!-- TODO:
 1. Fix your EventProviderId with Value same as the Id attribute on EventProvider xml element above
-->
            <EventProviderId Value="EventProvider_SimpleTraceLoggingProvider" />
          </EventProviders>
        </EventCollectorId>
      </Collectors>
    </Profile>

    <Profile Id="SimpleTraceLoggingProvider.Light.File" Name="SimpleTraceLoggingProvider" Description="SimpleTraceLoggingProvider" Base="SimpleTraceLoggingProvider.Verbose.File" LoggingMode="File" DetailLevel="Light" />
    <Profile Id="SimpleTraceLoggingProvider.Verbose.Memory" Name="SimpleTraceLoggingProvider" Description="SimpleTraceLoggingProvider" Base="SimpleTraceLoggingProvider.Verbose.File" LoggingMode="Memory" DetailLevel="Verbose" />
    <Profile Id="SimpleTraceLoggingProvider.Light.Memory" Name="SimpleTraceLoggingProvider" Description="SimpleTraceLoggingProvider" Base="SimpleTraceLoggingProvider.Verbose.File" LoggingMode="Memory" DetailLevel="Light" />

  </Profiles>
</WindowsPerformanceRecorder>

然后从提升的(以管理员身份运行)“命令提示符”窗口中使用WPR开始捕获。

wpr.exe-启动C:\ Users \ songz \ Desktop \ test.wprp

接下来,您可以运行包含事件的应用程序并停止跟踪捕获。

wpr.exe -stop C:\ Users \ songz \ Desktop \ test.etl说明

这样可以生成您通常需要的etl文件。

在此处输入图片说明

完成上述操作后,应捕获TraceLogging事件。根据github,您可以使用以下命令:

xperf -start MySession -f C:\ Users \ songz \ Desktop \ test.etl-在3970F9cf-2c0c-4f11-b1cc-e3a1e9958833

xperf -stop MySession

注意:您应该使用like xperf -start MySession -f MyFile.etl -on Id

最后,您可以通过WPA查看相应的信息。

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

获取Win32控制台中输出的行数?

来自分类Dev

使用PowerShell进行Win32可执行输出解析

来自分类Dev

python输出信息中的win32 ro win64?

来自分类Dev

python输出信息中的win32 ro win64?

来自分类Dev

在“ easy_install pywin32”之后找不到win32文件夹

来自分类Dev

在“ easy_install pywin32”之后找不到win32文件夹

来自分类Dev

在PowerShell中Win32可执行文件输出的字母之间的单个空格

来自分类Dev

无法将光标位置输出到调试字符串(WIN32)

来自分类Dev

Ruby Win32注册表:系统在查找不存在的注册表项时找不到指定的文件

来自分类Dev

Ruby Win32 Registry:查找不存在的注册表项时,系统找不到指定的文件

来自分类Dev

找不到Microsoft.Win32

来自分类Dev

来自Charles Petzold的纯C语言的MsgBoxPrintf(win32 api)提供中文输出...我做错了什么?

来自分类Dev

Win32的Cortana

来自分类Dev

Win32线程

来自分类Dev

win32 ExportAsFixedFormat

来自分类Dev

在docker容器中安装cygwin时出错:系统找不到指定的路径。(0x3)错误= hcsshim :: ImportLayer-在Win32中失败失败

来自分类Dev

WinAPI-如何将程序的所有标准输出和外部DLL重定向到Win32标准输出句柄?

来自分类Dev

找不到Winshell错误win32con

来自分类Dev

win32gui.FindWindow找不到窗口

来自分类Dev

Gitlab CI:找不到构建阶段的输出

来自分类Dev

Zipalign成功。找不到输出的APK文件

来自分类Dev

ffmpeg在cygwin下找不到输出目录

来自分类Dev

IDEA Scala:找不到输出目录

来自分类Dev

找不到opencv naclport构建输出

来自分类Dev

在Windows 10上找不到Wget的输出

来自分类Dev

xrandr:找不到输出“eDP-1”

来自分类Dev

在此代码中找不到正确的输出

来自分类Dev

Win32 mkdir与_mkdir

来自分类Dev

Python Win32:错误

Related 相关文章

  1. 1

    获取Win32控制台中输出的行数?

  2. 2

    使用PowerShell进行Win32可执行输出解析

  3. 3

    python输出信息中的win32 ro win64?

  4. 4

    python输出信息中的win32 ro win64?

  5. 5

    在“ easy_install pywin32”之后找不到win32文件夹

  6. 6

    在“ easy_install pywin32”之后找不到win32文件夹

  7. 7

    在PowerShell中Win32可执行文件输出的字母之间的单个空格

  8. 8

    无法将光标位置输出到调试字符串(WIN32)

  9. 9

    Ruby Win32注册表:系统在查找不存在的注册表项时找不到指定的文件

  10. 10

    Ruby Win32 Registry:查找不存在的注册表项时,系统找不到指定的文件

  11. 11

    找不到Microsoft.Win32

  12. 12

    来自Charles Petzold的纯C语言的MsgBoxPrintf(win32 api)提供中文输出...我做错了什么?

  13. 13

    Win32的Cortana

  14. 14

    Win32线程

  15. 15

    win32 ExportAsFixedFormat

  16. 16

    在docker容器中安装cygwin时出错:系统找不到指定的路径。(0x3)错误= hcsshim :: ImportLayer-在Win32中失败失败

  17. 17

    WinAPI-如何将程序的所有标准输出和外部DLL重定向到Win32标准输出句柄?

  18. 18

    找不到Winshell错误win32con

  19. 19

    win32gui.FindWindow找不到窗口

  20. 20

    Gitlab CI:找不到构建阶段的输出

  21. 21

    Zipalign成功。找不到输出的APK文件

  22. 22

    ffmpeg在cygwin下找不到输出目录

  23. 23

    IDEA Scala:找不到输出目录

  24. 24

    找不到opencv naclport构建输出

  25. 25

    在Windows 10上找不到Wget的输出

  26. 26

    xrandr:找不到输出“eDP-1”

  27. 27

    在此代码中找不到正确的输出

  28. 28

    Win32 mkdir与_mkdir

  29. 29

    Python Win32:错误

热门标签

归档