2010-04-20 6 views
2

J'essaie de profiler ma DLL .NET en la faisant fonctionner à partir d'outils de test d'unité VS, mais j'ai des problèmes. J'utilise le profileur de ligne de commande autonome car VS2008 Professional ne dispose pas d'un profileur intégré.Utilisation du profileur MS autonome dans VS2008 Professional

J'ai une fenêtre CMD ouverte et ont exécuter les commandes suivantes (j'instrumenté plus tôt ce qui explique pourquoi vsinstr a donné l'avertissement qu'il a fait):

C:\...\BusinessRules\obj\Debug>vsperfclrenv /samplegclife /tracegclife /globalsamplegclife /globaltracegclife 
Enabling VSPerf Sampling Attach Profiling. Allows to 'attaching' to managed applications. 

Current Profiling Environment variables are: 
COR_ENABLE_PROFILING=1 
COR_PROFILER={0a56a683-003a-41a1-a0ac-0f94c4913c48} 
COR_LINE_PROFILING=1 
COR_GC_PROFILING=2 

C:\...\BusinessRules\obj\Debug>vsinstr BusinessRules.dll 
Microsoft (R) VSInstr Post-Link Instrumentation 9.0.30729 x86 
Copyright (C) Microsoft Corp. All rights reserved. 

Error VSP1018 : VSInstr does not support processing binaries that are already instrumented. 

C:\...\BusinessRules\obj\Debug>vsperfcmd /start:trace /output:foo.vsp 
Microsoft (R) VSPerf Command Version 9.0.30729 x86 
Copyright (C) Microsoft Corp. All rights reserved. 

C:\...\BusinessRules\obj\Debug> 

je courais alors les tests unitaires qui ont exercé le instrumentés code. Lorsque les tests unitaires étaient complets, je l'ai fait ...

C:\...\BusinessRules\obj\Debug>vsperfcmd /shutdown 
Microsoft (R) VSPerf Command Version 9.0.30729 x86 
Copyright (C) Microsoft Corp. All rights reserved. 


Waiting for process 4836 (C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\vstesthost.exe) to shutdown... 

Il attendait clairement VS2008 de fermer si je l'ai fermé ...

Shutting down the Profile Monitor 
------------------------------------------------------------ 

C:\...\BusinessRules\obj\Debug> 

Tout en regardant bien, il y avait un 3.2MB Fichier foo.vsp dans le répertoire. J'ai ensuite fait ...

C:\...\BusinessRules\obj\Debug>vsperfreport foo.vsp /summary:all 

Microsoft (R) VSPerf Report Generator, Version 9.0.0.0 
Copyright (C) Microsoft Corporation. All rights reserved. 

VSP2340: Environment variables were not properly set during profiling run and managed symbols may not resolve. Please use vsperfclrenv before profiling. 
File opened 
Successfully opened the file. 
A report file, foo_Header.csv, has been generated. 
A report file, foo_MarksSummary.csv, has been generated. 
A report file, foo_ProcessSummary.csv, has been generated. 
A report file, foo_ThreadSummary.csv, has been generated. 
Analysis completed 
A report file, foo_FunctionSummary.csv, has been generated. 
A report file, foo_CallerCalleeSummary.csv, has been generated. 
A report file, foo_CallTreeSummary.csv, has been generated. 
A report file, foo_ModuleSummary.csv, has been generated. 

C:\...\BusinessRules\obj\Debug> 

Vous remarquez l'avertissement concernant les variables d'environnement et l'utilisation de vsperfclrenv? Mais je l'avais couru! Peut-être que j'ai utilisé les mauvais commutateurs? Je ne sais pas. Quoi qu'il en soit, le chargement des fichiers csv dans Excel ou à l'aide de l'outil perfconsole donne des charges d'informations utiles avec les noms de symboles inutiles:

*** Loading commands from: C:\temp\PerfConsole\bin\commands\timebytype.dll 
*** Adding command: timebytype 
*** Loading commands from: C:\temp\PerfConsole\bin\commands\partition.dll 
*** Adding command: partition 

Welcome to PerfConsole 1.0 (for bugs please email: [email protected]), for help type: ?, for a quickstart type: ?? 

> load foo.vsp 
*** Couldn't match to either expected sampled or instrumented profile schema, defaulting to sampled 
*** Couldn't match to either expected sampled or instrumented profile schema, defaulting to sampled 
*** Profile loaded from 'foo.vsp' into @foo 

> 
> functions @foo 
>>>>> Function Name 

Exclusive   Inclusive   Function Name Module Name 
-------------------- -------------------- -------------- --------------- 
900,798,600,000.00 % 900,798,600,000.00 % 0x0600003F  20397910 
14,968,500,000.00 % 44,691,540,000.00 % 0x06000040  14736385 
8,101,253,000.00 % 14,836,330,000.00 % 0x06000041  5491345 
3,216,315,000.00 % 6,876,929,000.00 % 0x06000042  3924533 
<snip> 
71,449,430.00 %  71,449,430.00 %  0x0A000074  42572 
52,914,200.00 %  52,914,200.00 %  0x0A000073  0 
14,791.00 %   13,006,010.00 %  0x0A00007B  0 
199,177.00 %   6,082,932.00 %  0x2B000001  5350072 
2,420,116.00 %  2,420,116.00 %  0x0A00008A  0 
836.00 %    451,888.00 %   0x0A000045  0 
9,616.00 %   399,436.00 %   0x0A000039  0 
18,202.00 %   298,223.00 %   0x06000046  1479900 

Je suis si près de pouvoir trouver les goulots d'étranglement, si seulement il me donnera la fonction et les noms de modules à la place des nombres hexadécimaux!

Qu'est-ce que je fais mal?

--- Alistair.

Répondre

0

Un couple de choses possibles pour essayer (note que je ne suis pas un expert dans la ligne de commande profileur - Je ne l'ai utilisé une ou deux fois while retour):

  1. Le docs for vsperfclrenv dit:

    L'option que vous choisissez dépend du type de profilage que vous utilisez: échantillonnage, instrumentation ou global.

    Vous avez des options pour les 3 types de profilage dans votre appel à vsperfclrenv - Je vous suggère de choisir un type de commencer, et de là passer si cela fonctionne, mais vous voulez essayer d'autres choses pour voir s'ils fonctionnent mieux.

  2. Vous devrez peut-être également spécifier un emplacement pour les symboles (même si cela n'est pas fait en utilisant vsperfclrenv). L'emplacement du symbole peut être configuré à l'aide de la variable d'environnement _NT_SYMBOLS_PATH ou de l'option /SymbolPath à vsperfreport (ou en ayant les fichiers .pdb au même emplacement que les fichiers binaires). Voir "How to: Specify Symbol File Locations from the Command Line" pour plus de détails.

2

La raison se révèle être que je ne courais pas l'exécutable dans le même processus que les variables d'environnement ont été définies. Il est le code instrumenté qui a besoin d'accéder aux variables d'environnement, et non pas le profileur.

J'ai donc lancé VS2008 directement à partir de la ligne de commande après avoir utilisé vsperfclrenv et tout a fonctionné et j'ai mes noms de fonctions. Malheureusement, je reçois toujours les erreurs de schéma, ce qui signifie que je ne peux pas explorer l'arbre d'appel, mais j'ai au moins réussi à identifier ce goulot d'étranglement particulier.

--- Alistair.

Questions connexes