gpt4 book ai didi

c++ - 从用户模式应用程序使用 WPP

转载 作者:行者123 更新时间:2023-11-30 02:04:44 24 4
gpt4 key购买 nike

我尝试在用户模式下使用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) \
)

有谁知道为什么它可以在 Release模式下工作但在 Debug模式下不起作用?

最佳答案

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

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

关于c++ - 从用户模式应用程序使用 WPP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10297805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com