2014-10-03 9 views
6

Sto analizzando un programma C# da Visual Studio 2013. Vado su Analizza -> Prestazioni e diagnostica per avviare la procedura guidata. Mi dà una scelta del metodo di profilazione. Se scelgo l'impostazione predefinita, il campionamento della CPU, quindi la creazione del profilo funziona e posso vedere i risultati. Tuttavia, se scelgo la terza opzione, l'allocazione di memoria NET, poi dopo la mia domanda ha finito di vedere i risultati vuoti e questo errore nella finestra di output di Visual Studio:VS2013: "VSP2340: Le variabili di ambiente non sono state impostate correttamente" anche quando si esegue da IDE

VSP2340: Environment variables were not properly set during profiling run and managed 
symbols may not resolve. Please use vsperfclrenv before profiling 

Tutta la documentazione che ho visto on-line suggerisce che vsperfclrenv deve essere utilizzato con il profiler autonomo e non è necessario quando si esegue il profiler direttamente da Visual Studio. Tuttavia, solo per essere sul sicuro ho provato a installare le variabili d'ambiente necessarie da una finestra del prompt dei comandi e quindi eseguire l'IDE direttamente da quella finestra, in modo che raccoglie l'ambiente:

C: 
cd "\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Performance Tools\x64" 
vsperfclrenv /samplegclife /tracegclife /globalsamplegclife /globaltracegclife 
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe" 

Poi sono andato al procedura guidata delle prestazioni all'interno di Visual Studio come prima. Ma il risultato è lo stesso; Vedo ancora il VSP2340 nel tentativo di analizzare i risultati. Che cosa sto facendo di sbagliato?

Ho notato che la procedura guidata ha quattro tipi di profili da scegliere: campionamento della CPU, strumentazione, allocazione della memoria e conflitto di risorse. Ciò non corrisponde esattamente alle opzioni offerte da vsperfclrenv, che parla solo di campionamento e tracciamento del profilo (con varianti di applicazione e di servizio di ciascuno, il mio programma è un'applicazione e non un servizio, ma ho abilitato tutte le opzioni solo per essere sicuro) .

Potrebbe esserci qualche variabile di ambiente aggiuntiva necessaria per il profilo di allocazione della memoria? O il messaggio di Visual Studio su vsperfclrenv è fuorviante?

+0

Forse si riavvia una shell?Dovresti almeno uccidere "explorer" dal process manager, chiudere il process manager, aprirlo di nuovo (con ctrl + shift + escape), quindi ricaricherà evnVars e avvierà explorer. Se sembra troppo complesso, riavvia il PC. E prova a eseguire 'vsperfclrenv' come amministratore. E riparare l'installazione di Visual Studio –

+0

In alternativa puoi provare JetBrains, RedGate o Profiler di memoria SciTech (il più avanzato quando si tratta di memoria non gestita) –

risposta

0

Hai provato a eseguire un prompt dei comandi di Visual Studio (come amministratore) ed eseguire il comando vsperfclrenv/globalsampleon? Dopo che potrebbe essere necessario riavviare.

1

Questo potrebbe essere correlato ai privilegi amministrativi. Nel mio caso, so di due soluzioni alternative:

  1. Eseguire Visual Studio come utente con i privilegi di amministratore reali.
  2. Utilizzare [Start -> Microsoft Visual Studio 2012 -> Visual Studio Tools ->] Prompt dei comandi dello sviluppatore per VS2012 -> Esegui come amministratore. Al prompt dei comandi, vsperfclrenv /samplegclife. Il titolo della finestra cambia da Administrator: Developer Command Prompt for VS2012 a Administrator: VSPerf Sampling Attaching and Allocation Profiling with objects lifetime 'ON'. Quindi "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe".

Il secondo approccio sembra proprio quello che ha fatto il manifesto originale, solo che invece di una finestra cmd.exe normale, ho usato Esegui come amministratore con il prompt dei comandi Developer. Per me, quando non corro come amministratore, ottengo l'errore VSP2340.

Ho riscontrato sintomi molto simili con un ambiente leggermente diverso: Windows 7, come utente normale (non nel gruppo Administrators locale), avvio di Visual Studio 2012 dal menu Start, con Avecto Defendpoint per concedere privilegi elevati a l'eseguibile di Visual Studio, il profilo della CPU ha prodotto risultati normali ma i risultati del campionamento di allocazione della memoria .NET erano vuoti. finestra di output ha detto:

Profiling started. 
Profiling process ID #### (xxxx). 
Process ID #### has exited. 
Data written to C:\path\to\solution\xxxxyymmdd.vsp. 
Profiling finished. 
VSP2340: Environment variables were not properly set during profiling run and 
    managed symbols may not resolve. Please use vsperfclrenv before profiling. 
Profiling complete. 

Per CPU profiling viene eseguito, invece di VSP2340, ottengo un lungo elenco di Loaded symbols for [full/path/to/dll]

+0

Grazie. Nel momento in cui ho colpito l'errore ero in esecuzione come utente con diritti di amministratore locale. Ma farò in modo di includere questo passo la prossima volta. –

+0

Quando avevo i diritti di amministratore locale, non dovevo fare nulla di speciale (né avrei trovato la tua domanda!) In questo caso (ho diritti di amministratore e vedo ancora VSP2340), dubito che questo approccio (eseguito come amministratore) funzionerà . –