Question

Je suis en train d'ajouter des compteurs de performance et des événements personnalisés à un logiciel, afin que je puisse voir ces programmes à l'aide de Windows Performance Toolkit tels que XPerf et GPUView.   Je vais refrain, en utilisant tous mes pouvoirs de contrainte, de se lancer dans une diatribe cathartique sur l'état de la documentation du logiciel et le temps que je l'ai maintenant perdu à essayer d'indices tease à partir du Web. Je vais décrire comment je suis arrivé là où je suis maintenant, juste au cas où cela est utile à d'autres âmes perdues.

Jusqu'à présent, je l'ai compris que je dois écrire un manifeste d'événement pour mes compteurs de performances et d'événements. Vous pouvez le faire manuellement ou en utilisant un outil appelé ' ecmangen.exe . La documentation de ce programme donne une belle étape par étape pour l'événement, mais la création manifeste n'explique pas comment intégrer ces derniers avec votre code.

L'étape suivante, pour autant que je peux travailler, est d'utiliser deux applications de ligne de commande cryptique ' MC.exe et CTRPP.exe . Ceux-ci semblent générer C ou en-têtes C #, la source et les fichiers de ressources pour ajouter événement et contre l'instrumentation à votre code, respectivement.   Ensuite, vous devez construire votre code (voir les échantillons dans C: \ Program Files \ Microsoft SDKs \ Windows \ V7.1 \ Samples \ winbase \ concours complet), puis nous arrivons là où je suis actuellement coincé: la utilisation correcte de l'outil suivant cryptique ' wevtutil.exe

Cet outil a besoin de deux choses: le binaire (EXE ou DLL) que vous avez compilé avec ces ressources en elle et le fichier manifeste que vous avez utilisé pour générer ces ressources. Le problème que je vais avoir est que c'est très pointilleux sur l'endroit où le fichier binaire est et j'ai été incapable de déterminer la forme de cette pickiness. Incantations et les sacrifices de chèvres ont donné aucun résultat.

Si j'ai un chemin défini dans le champ « resourceFileName » de l'étiquette « fournisseur » dans le fichier manifeste comme « c: \ MYDIR \ TEd.exe » il est très bien. Cependant, si je mets le même exe dans un dossier différent (celui qui a échoué était C: \ tw \ TEd.exe), il se plaint.

Le message d'erreur donné est Attention:. Editeur ressources TEd-Event-fournisseur ne sont pas accessibles. mais pas plus expliquer pourquoi, ou où il a essayé de regarder

Alors, je vais bien sur l'ajout d'instruments dans le mauvais sens, est-il déjà un guide qui explique tous les trucs et quelle est la nature de la « sélectivité wevtutil.exe est étrange vers les noms de répertoire.

Merci à l'avance,

Tim.

Était-ce utile?

La solution

Je viens d'avoir exactement le même message, et a lutté pendant une heure pour le résoudre, avant d'avoir un encéphalogramme et lire le msg d'erreur; -).

La solution à mon problème était simplement d'ajouter le fichier « .rc » à mon projet, puis re-construction. En regardant en arrière, il est assez évident, mais il me avait déconcerté pendant un certain temps.

Hope this helps.


Edition - 4 février Ok, pas trop sûr si je sais ce que votre problème est, mais le script batch suivant est la façon dont je l'ai fait tout. Bonne chance.

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

Autres conseils

J'ai eu le même problème - mieux que je peux dire, il y a une limite de longueur de répertoire sur wevtutil. Lorsque j'ai installé le fichier à partir d'un répertoire avec un chemin plus court, il a travaillé.

Dans le cas où quelqu'un d'autre vient à travers cela, vous pouvez réellement faire avancer les choses de travail à partir d'un répertoire arbitraire:

Ajouter un utilisateur Lecture et exécution privs dans un répertoire contenant ou au-dessus de votre projet:

  

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

Ensuite, l'installation du manifeste devrait fonctionner sans erreur:

  

wevtutil im yourmanifest.man /rf: c: \ complet \ chemin \ \ yourprogram.exe /mf: c: \ complet \ chemin \ \ yourprogram.exe

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top