【问题标题】:use WPP from user mode application从用户模式应用程序中使用 WPP
【发布时间】:2012-04-24 12:27:02
【问题描述】:

我尝试在用户模式下使用WPP,在VS10中成功使用它,通过添加到proj文件来发布目标:

    <PropertyGroup><WdkDir>c:\work\Proj\wppTest\DDK\</WdkDir><MyTargetsDir>c:\work\Proj\wppTest</MyTargetsDir>  </PropertyGroup>

...

  <ImportGroup Label="ExtensionTargets">
    <Import Project="$(MyTargetsDir)\Wpp.targets" />
  </ImportGroup>

那么 Wpp.targets 是这样定义的:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
      <ExtensionsToDeleteOnClean>$(ExtensionsToDeleteOnClean);*.tmh</ExtensionsToDeleteOnClean>
  </PropertyGroup>
  <ItemGroup>
      <CoreCppClean Include="@(CoreCppClean);$(ProjectDir)">
          <FilePatternsToDelete>*.tmh</FilePatternsToDelete>
     </CoreCppClean>
  </ItemGroup>
  <ItemGroup>
    <TraceWppSources Include="@(ClCompile)" Exclude="stdafx.cpp" />
  </ItemGroup>
  <Target Name="TraceWpp" BeforeTargets="ClCompile" Inputs="@(TraceWppSources)" Outputs="@(TraceWppSources -> '%(Filename).tmh')">
    <Exec Command="cd $(ProjectDir)" />
    <Message Importance="high" Text="Creating tmh"/>
    <Exec Command="$(WdkDir)\bin\x86\tracewpp.EXE -cfgdir:$(WdkDir)\bin\wppconfig\rev1 -odir:. @(TraceWppSources, ' ')" />
    <Message Importance="high" Text="tmh created"/>
  </Target>
</Project>

这些步骤取自文章:http://www.devproconnections.com/article/visual-studio-2010/wpp-tracing-in-visual-c-2010-projects

当尝试在 VS10->Debug 下编译时,我可以看到“tmh”文件正在生成,但实际上我想记录一些东西时出现错误:

DoTraceMessage(TRACE_ERROR, L"啊哈"); // 错误 C2065: 'TRACE_ERROR' : 未声明的标识符错误 C3861: 'WPP_CALL_Application_Test_cpp': 找不到标识符

正如我所说,我对 VS10->Release 目标上的相同代码没有任何问题。这是我的定义供参考:

#pragma once

#define WPP_CONTROL_GUIDS \
    WPP_DEFINE_CONTROL_GUID(CtlGuid,(28EE579B, CF67, 43b6, 9D19, 8930E7AAA131),  \
                                                                            \
        WPP_DEFINE_BIT(TRACE_ERROR)                                   \
        WPP_DEFINE_BIT(TRACE_WARNING)                                   \
        WPP_DEFINE_BIT(TRACE_INFO1)                                   \
        WPP_DEFINE_BIT(TRACE_INFO2)                                   \
        )

有谁知道为什么这可能在发布模式下工作但在调试模式下不工作?

【问题讨论】:

    标签: c++ visual-studio logging etw


    【解决方案1】:

    是的,问题是当您使用“支持编辑并继续支持的 PDB 中的调试符号”进行编译时,编译器无法解析 __LINE__ 宏。

    如果您从 Application_Test.cpp 第 51 行跟踪,WPP 编译器会定义一个函数 WPP_CALL_Application_Test_cpp51,并使用 __FILE__ 和 __LINE__ 来执行此操作。

    【讨论】:

      【解决方案2】:

      找出它没有在 DEBUG 模式下编译的原因。我设置了 /ZI 编译器标志 (1),它期望 /Zi 编译格式可以在 Debug 中工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-29
        • 1970-01-01
        • 2014-12-06
        • 1970-01-01
        • 2018-05-11
        • 2020-04-03
        相关资源
        最近更新 更多