Archiv

Posts Tagged ‘Visual Studio’

Debugging Azure Production Role; Intellitrace in VS 2012

10. September 2012 Hinterlasse einen Kommentar

Allgemein

Bisher stellte die Fehlersuche in einer produktiven Azure Web-, oder Worker Role immer eine Herausforderung dar. Die Verwendung der Azure Diagnostics API in Verbindung mit Traces innerhalb des Source Code stellt eine Möglichkeit zur Verfügung Bugs, welche nicht in der lokalen Entwicklungsumgebung auftreten, ausfindig zu machen und diese zu fixen.

Mit Visual Studio 2012 hat Microsoft eine sehr elegante weiterführende Möglichkeit integriert, produktive Azure Services unter Verwendung von IntelliTrace zu debuggen.  Hierzu werden keine speziellen Debug Builds oder Remote Debugging Konfigurationen benötigt. Auch muss der Azure Service nicht mit VS 2012 erstellt oder IntelliTrace beim Publish des Service aktiviert worden sein.

 

imageDie größte Einschränkung vorab: IntelliTrace ist leider auch in Visual Studio 2012 erst ab der Ultimate Version verfügbar. D. h. um das beschriebene Verfahren durchführen zu können muss die Ultimate Edition von Visual Studio 2012 installiert sein. Visual Studio Premium, Professional oder die kostenfreie Express Edition unterstützen IntelliTrace nicht. 

Ist man jedoch in dem Genuss einer 2012 Ultimate Edition steht dem eleganten Debuggen von produktiven Azure Diensten nichts im Weg.

 

 

Vorbereitungen

Das Sammeln der IntelliTrace Informationen in dem produktiven Azure Service erfolgt mit einer PowerShell Erweiterung. Deshalb muss sichergestellt werden, dass der Azure Service auch mit einer kompatiblen PowerShell Version gestartet worden ist.

Legt man einen neuen Cloud Service an, so findet sich in der Datei  ServiceConfiguration.Cloud.cscfg im Element <ServiceConfiguration> ein Attribut osFamily.

image

osFamily=1 steht hierbei für eine dem Azure Service zugrundeliegende virtuelle Maschine mit Windows Server 2008 SP2. Hier muss darauf geachtet werden, dass der Wert auf 2 geändert wird. Die 2 steht für eine zugrundeliegende virtuelle Maschine mit Windows Server 2008 R2.

Windows 2008 R2 verfügt über eine kompatible PowerShell Version welche für das Sammeln der IntelliTrace Informationen benötigt wird. Die aktuelle Version der PowerShell kann durch Eingabe von:

image

 

$Host.Version

 

in einem PowerShell Fenster ermittelt werden. Minimal sollte die Major Version 2.0 in der dem Azure Service zugrundeliegenden virtuellen Maschine installiert sein.

Um die PowerShell Version feststellen zu können und das Sammeln der IntelliTrace Informationen zu beginnen muss sich zunächst via RDP auf die dem Azure Service zugrundeliegende VM aufgeschaltet werden. Dies kann im Portal oder sehr komfortabel über den Servermanager innerhalb von Visual Studio erfolgen.

 

image

Einfach im Server Explorer den gewünschten Service auswählen und mit rechter Maustaste “Connect using Remote Desktop” anklicken. Alternativ kann auch über das Azure Portal eine entsprechende Verbindung aufgebaut werden. Sollte keine Verbindung möglich sein, bzw. die Auswahl “Connect using Remote Desktop” nicht zur Verfügung stehen, muss überprüft werden, ob beim Deploy des Azure Service die Option “Allow Remote Desktop connection” aktiviert wurde.

 

Sammeln von IntelliTrace Informationen

Nach erfolgreicher Anmeldung an der virtuellen Maschine des Azure Service via RDP kann von folgender URL: http://www.microsoft.com/en-us/download/details.aspx?id=30665 der sog. “IntelliTrace Collector for Visual Studio 2012” geladen werden. Hierbei handelt es sich um ein selbst entpackendes Exe mit einem enthaltenen CAB File. Wichtig ist, dass nichts auf dem produktiven Server installiert werden muss!

Das in dem EXE File enthaltene CAB File muss in einem Verzeichnis (im Beispiel C:\IntelliTrace) mit folgendem Kommando entpackt werden.

image

Es bietet sich an, das IntelliTrace File mit den gesammelten Informationen im gleichen Verzeichnis oder einem Unterverzeichnis anlegen zu lassen. Deshalb sollte dem Verzeichnis Schreib-, und Leserechte für den User “Everyone” zugewiesen werden.

Nach Entpacken des CAB Files kann eine PowerShell Session gestartet werden und innerhalb dieser das Modul “Microsoft.VisualStuido.IntelliTrace.PowerShell.dll” geladen werden.

image

Als nächsten Schritt kann mit dem Kommando “Start-IntelliTraceCollection” unter Angabe des ApplicationPools unter dem der Service ausgeführt wird, des CollectionPlan “collection_plan.ASP.NET.trace.xml” und dem Verzeichnis in dem das IntelliTrace File abgelegt werden soll das Sammeln der IntelliTrace Informationen gestartet werden.

image

Achtung: Der App-Pool wird neu gestartet!

Jetzt kann der Cloud Service getestet werden und alle “IntelliTrace Events” und “Call Information” werden gespeichert. Das Sammeln der Informationen kann mit “Stop-IntelliTraceCollection” und Angabe des App-Pools wieder beendet werden. 

image

In dem beim “Start-IntelliTraceCollection” angegeben Verzeichnis findet sich das erzeugte IntelliTrace File. Dieses kann in die lokale Umgebung kopiert und dort in Visual Studio 2012 geöffnet werden.

Interessant ist vor allen Dingen die neue Anzeige aller WebRequest anhand derer man schnell zu den jeweiligen Ereignissen navigieren und diese debuggen kann.

image

Es steht die komplette IntelliTrace Funktionalität zur Verfügung um alle Aktivitäten, welche auf dem Server in der Zeit in der das Sammeln der IntelliTrace Informationen auf dem Server gestartet war, zu debuggen.

image

 

Fazit

Das “historische Debuggen” mit Hilfe von IntelliTrace ist (insbesondere weil keine zusätzliche Software auf den produktiven virtuellen Servern installiert werden muss) eine sehr gelungene Möglichkeit produktive Umgebungen zu debuggen und Fehler schnell zu erkennen bzw. zu beheben.

Als Wermutstropfen bleibt jedoch die Tatsache, dass dies den Besitzern der Ultimate Edition von Visual Studio vorbehalten bleibt.