Pregunta

Estoy tratando de agregar contadores de rendimiento y eventos personalizados a una pieza de software, de modo que pueda ver estas utilizando programas de Windows Performance Toolkit como XPerf y GPUView. Voy a estribillo, utilizando todos mis poderes de coerción, a partir de lanzarse a una diatriba catártica con respecto al estado de la documentación para el software y el tiempo ahora que he perdido tratando de pistas burlan de la web. Voy a describir cómo llegué a donde estoy ahora, por si acaso esto es de utilidad para otras almas perdidas.

Hasta ahora, he deducido que tengo que escribir un manifiesto de eventos para mis contadores de rendimiento y eventos. Esto se puede hacer a mano o mediante el uso de una herramienta llamada ' ecmangen.exe '. La documentación de dicho programa da una buena guía paso a paso para la creación de los manifiestos de eventos, pero no explica cómo integrar estos con su código.

El siguiente paso, por lo que yo puedo hacer ejercicio, es utilizar dos aplicaciones de línea de comandos crípticos ' MC.exe ' y ' CTRPP.exe '. Estos parecen generar C o C # cabeceras, fuente y archivos de recursos para añadir eventos e instrumentación en contra de su código, respectivamente. A continuación, usted tiene que construir su código (ver las muestras en 'C: \ Archivos de programa \ Microsoft SDKs \ Windows \ v7.1 \ Samples \ winbase \ Prueba Completa') y luego llegamos a donde estoy actualmente atascado: la uso correcto de la herramienta siguiente críptico ' wevtutil.exe

Esta herramienta necesita dos cosas: el binario (EXE o DLL) que se ha compilado con esos recursos en ella y el archivo de manifiesto que utilizó para generar esos recursos. El problema que estoy teniendo es que es muy exigente con el archivo binario es y he sido incapaz de determinar la forma de esta meticulosidad. Conjuros y sacrificios de cabras han dado ningún resultado.

Si tengo una trayectoria definida en el campo 'recurso, resourceFileName' de la etiqueta de 'proveedor' en el archivo de manifiesto como 'c: \ MYDIR \ TEd.exe', entonces está bien. Sin embargo, si hice la misma exe en una carpeta diferente (uno que no era C: \ tw \ TEd.exe), se queja.

El mensaje de error que aparece es 'Aviso:. Editorial recursos TED-Evento-proveedor no son accesibles'. pero no más explicación de por qué, o donde intentó mirada

Por lo tanto, voy sobre la adición de la instrumentación de la manera incorrecta, es ya una guía que explica todos los aspectos críticos y cuál es la naturaleza de 'wevtutil.exe es extraño selectividad hacia los nombres de directorio.

Gracias de antemano,

Tim.

¿Fue útil?

Solución

acabo de tener exactamente el mismo mensaje, y se esforzó durante una hora para resolverlo, antes de que tuviera una idea genial y leer el error msg; -).

La solución a mi problema era simplemente para agregar el archivo ".rc" a mi proyecto, y luego volver a construir. Mirando hacia atrás es bastante obvio, pero me tenía confundido por un tiempo.

Espero que esto ayude.


Editar - 4 de Feb Bien, no muy seguro de si sé cuál es tu problema, pero la siguiente secuencia de comandos por lotes es cómo lo hice todo. Buena suerte.

rem -------------------------------------------------------------------
rem Do all of this from the project directory

rem -------------------------------------------------------------------
rem Generate Header and Resource - remove the ReadOnly attrib to "help" it along
attrib -r MyModuleTracing.h
mc.exe -um MyModuleTracing.xml
rem This generates MyModuleTracing.h and MyModuleTracing.rc, add both to your project

rem -------------------------------------------------------------------
rem ** Now build the project **
rem -------------------------------------------------------------------

rem Register MyModule Tracing with the system
if exist MyModuleTracing.xml (
  wevtutil um MyModuleTracing.xml

  copy MyModuleTracing.xml Release
  cd Release
  copy MyModule.dll %SystemRoot%\System32
  wevtutil im MyModuleTracing.xml
)

rem -------------------------------------------------------------------
rem Do a capture, and also export the results to an XML file.
xperf -start MyModuleSession -on [REPLACE_WITH_YOUR_GUID] -f MyModuleSession.etl
xperf -on base -f Kernel.etl

rem Run the app, wait until exit, and then stop the capture
start /wait MyModule.exe

xperf -stop
xperf -stop MyModuleSession
xperf -merge MyModuleSession.etl Kernel.etl MyModuleSessionMerged.etl

tracerpt MyModuleSessionMerged.etl -o MyModuleSessionMerged.xml -of XML

Otros consejos

Yo tenía el mismo problema - lo mejor que puedo decir, hay un límite de directorio en wevtutil. Cuando instalé el archivo desde un directorio con una ruta más corta, funcionó.

En el caso de cualquier otra persona se encuentra con esto, en realidad se puede hacer las cosas que trabajan desde un directorio arbitrario:

Añadir usuario de lectura y ejecución privs a un directorio que contiene o por encima de su proyecto:

icacls projectdir /grant BUILTIN\Users:(OI)(CI)(RX)

A continuación, instalar el manifiesto debería funcionar sin errores:

wevtutil im yourmanifest.man /rf: c: \ completa \ ruta \ a \ yourprogram.exe /mf: c: \ completa \ ruta \ a \ yourprogram.exe

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top