использовать WPP из приложения пользовательского режима

Я пытаюсь использовать 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, Л"Ага"); // ошибка C2065: 'TRACE_ERROR': необъявленная ошибка идентификатора C3861: 'WPP_CALL_Application_Test_cpp': идентификатор не найден

Как я уже сказал, у меня нет проблем с тем же кодом в VS10->Release target. Вот мои определения для справки:

#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?


person Ghita    schedule 24.04.2012    source источник


Ответы (2)


Да, проблема в том, что при компиляции с помощью «Символы отладки в PDB с поддержкой редактирования и продолжения» компилятор не разрешает макрос __LINE__.

Компилятор WPP определяет функцию WPP_CALL_Application_Test_cpp51, если вы выполняете трассировку из строки 51 Application_Test.cpp, и использует для этого __FILE__ и __LINE__.

person Uri Cohen    schedule 24.04.2012

Выяснил причину, по которой он не компилировался в режиме DEBUG. У меня был флаг компилятора /ZI (1) установлен, и ожидалось, что формат /Zi для компиляции будет работать в Debug.

person Ghita    schedule 24.04.2012