Comment effectuer le suivi de chaque méthode appelée
J'ai déjà un projet où je voudrais savoir tous les appels et peut-être de vidage dans un fichier journal.
J'ai eu un coup d'oeil à ce fil, mais il n'a pas beaucoup d'aide.
J'ai essayé de PostSharp, et l'exemple montre comment l'atteindre. Mais j'ai besoin d'ajouter un attribut à chaque reprise la méthode. Étant un projet existant, avec de nombreuses méthodes qui n'est pas une option réalisable.
Est-il un autre moyen par lequel je peux rapidement la trace de tous les appels effectués?
- Avez-vous pris un coup d'oeil à stackoverflow.com/questions/171970/...
- Je ne peux pas aider mais se demander pourquoi vous voulez que. Dans le cas d'une exception, vous pouvez consulter la stacktrace. Mais pourquoi voudriez-vous un journal de tous les appels de méthode?
- Il y a un bug que nous sommes en mesure de retracer jusqu'à un certain point, et après que le contrôle passe à l'application parente qui n'est pas notre demande - donc pas de code source (quelque part après cela, l'application cesse de répondre). Pour savoir ce qui est appelé dans notre application, une fois que nous sommes de les essayer.
- MulticastAttribute dans PostSharp? doc.sharpcrafters.com/postsharp-2.1/##PostSharp-2.1.chm/html/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire cela avec L'Unité D'Interception
Voir ce article pour un exemple. L'article utilise des attributs, mais mon exemple de code ci-dessous utilise l'injection de dépendance (système de codage à une interface) pour l'installation d'interception.
Si vous souhaitez vous connecter
MyClass
, il va quelque chose comme ceci:MyClass
=>IMyClass
IMatchingRule
.Code:
Utiliser un Profiler dans le mode de traçage. Ensuite, vous verrez comment tout ne s'appellent les uns les autres et où le temps est passé. En outre commercial profileurs il y a aussi des gratuits.
Pour le code managé, il est NP Profiler qui est assez bon.
Si vous voulez aller plus loin, vous pouvez utiliser le Windows Performance Toolkit qui vous donne le plein d'informations sur l'ensemble des fils et comment interagir les uns avec les autres si vous voulez savoir. La seule différence est que vous obtenez des piles allant de noyau jusqu'à ce que vos blocs gérés.
Si ce n'est pas suffisant, vous pouvez instrument de votre code avec une bibliothèque de traçage (soit automatiquement avec PostSharp, ....) ou manuellement ou avec une macro pour chaque fichier source.
J'ai fait une petite bibliothèque de traçage qui est assez rapide et hautement configurable. Voir ici. Comme caractéristique unique, il peut retracer toute exception levée automatiquement.
Voici le résultat:
PostSharp offre certainement un moyen d'appliquer un aspect à plusieurs cibles sans les décorant avec des attributs explicitement. Voir Multidiffusion attributs.
Lors de l'élaboration (multicast) aspect vous devez spécifier son utilisation:
Et ensuite appliquer l'aspect d'une manière qui couvre votre cas d'utilisation (par exemple. tous les membres du public dans la base de données AdventureWorks.BusinessLayer espace de noms):