——————————————————————————————————————–
Dieser Blog Post ist eine Kopie von http://www.developer-week.de/, wo der Originalpost von mir publiziert wurde: http://www.developer-week.de/Blog/Laeuft-nicht-Gibt-s-nicht
——————————————————————————————————————— I
Troubleshooting in VS2015
Software die einfach so perfekt läuft? Das gibt’s leider immer noch nicht. Stürzt ab, ist zu langsam, ist instabil – jeder Entwickler kennt das nur allzu gut. Wenn’s mal nicht so läuft, dann beginnt meist der steinige Weg der Fehlersuche. Oft ist der Weg nicht nur mühsam, sondern der Berg auch hoch. Einen grossen Teil der Zeit, welche in die Softwareentwicklung investiert wird, geht bei der Fehlersuche verloren.
Den Debugger aus Visual Studio kennt der erfahrene Entwickler wie seine eigene Westentasche, schliesslich ist er ein treuer Begleiter in der täglichen Entwicklungsarbeit. Für die anspruchsvollen Probleme müssen aber grössere und stärkere Werkzeuge her. Klar, die tiefsten Einblicke in Software auf einem Windows Betriebssystem bietet der native Windows Debugger WinDbg.exe. Leider sind besonders die ersten Erfahrungen mit WinDbg oft eher ernüchternd. Symbolpfade müssen gesetzt werden, die entsprechenden Debugging Extensions für .NET in der passenden Version geladen werden und wenn man die ganze Vorbereitung hinter sich hat, kriegt man auf den ersten Blick nicht mehr als eine Kommandozeile mit einer grossen Liste von kryptischen Befehlen.
Zum Glück geht es auch einfacher! Mit Visual Studio 2015 hielten einige spannende Neuerungen im Bereich des Troubleshooting Einzug in die Entwicklungsumgebung. Besonders lobenswert ist, dass (fast) nicht mehr zwischen den verschiedenen Ausgaben von Visual Studio unterschieden wird. Die folgenden Tools sind alle selbst in der kostenlosen Visual Studio Community Edition verfügbar.
Das Diagnostic Tools Window
Das Diagnostic Tools Window (Abb. 1) zeigt während der Ausführung der Applikation den aktuellen Speicherverbrauch und die Prozessoraktivität in Echtzeit an.
Abbildung 1: Das Diagnostic Tools Window
Zusätzlich wird die Aktivität der Garbage Collectors ebenfalls live angezeigt. Per Knopfdruck können Snapshots des Arbeitsspeichers erzeugt werden, welche die Anzahl Objekte im Arbeitsspeicher und deren Grösse in Kilobytes ausweisen (Abb2).
Abbildung 2: Snapshots aus dem Arbeitsspeicher
Werden mehrere Snapshots erzeugt, können diese anhand einer Auswertung verglichen werden. Diese Analyse hilft beispielsweise, um Memory-Leaks zu untersuchen (Abb3).
Abbildung 3: Differenzanalyse zweiter Speicherabbilder
Neue XAML-Tools
Weitere Werkzeuge gibt es für Windows-Clientanwendungen, welche mit XAML (eXtensible Application Markup Language) geschrieben wurden. Zur Untersuchung von Windows Presentation Foundation (WPF) Applikationen oder Windows Universal Apps (UWP) können der Live Visual Tree und der Live Property Explorer beigezogen werden. Der Live Visual Tree zeigt die interne Struktur der Anwendung zur Laufzeit an. Mit dem Live Property Explorer können die Eigenschaften der visuellen Elemente, und deren Veränderungen, untersucht werden. Die beiden Tools ermöglichen eine Art der Fehlersuche, wie man sie aus der Web-Entwicklung und den Entwicklertools im Browser kennt (Abb. 4).
Abbildung 4: Der Live Visual Tree
WPF Profiling Tools
Reichen die Erkenntnisse immer noch nicht zur Lösung des Problems, dann muss zu härteren Mitteln gegriffen werden. Jetzt ist Profiling angesagt! Beim Profiling werden während einer kritischen Phase der Anwendung im Hintergrund Daten aufgezeichnet. Diese Daten werden aggregiert, ausgewertet und grafisch dargestellt und geben weitere Hinweise. Visual Studio beinhaltet seit einigen Generationen den Visual Studio Profiler, welcher für das Profiling von Prozessor-, Speicher- und Thread-Aktivität beigezogen werden kann. Mit der Einführung der Diagnostic Tools bietet Visual Studio 2015 aber noch viel mehr. Die Diagnostic Tools sind eine Sammlung von Analysewerkzeugen, welche jeweils ein überschaubares Thema untersuchen. Eines davon, das Timeline Tool, wird im folgenden Abschnitt vorgestellt.
Mit dem Application Timeline Tool können WPF oder UWP Apps untersucht werden. Die grafische Auswertung zeigt eine Zeitachse, auf welcher ersichtlich ist, wie die Anwendung Zeit verbraucht hat. Dabei werden nicht nur die Prozessorauslastung und die Bildrate in Frames per Second (FPS) angezeigt, sondern es wird auch die Aktivität auf dem UI-Thread in Tätigkeiten aufgeschlüsselt. Abb. 5 zeigt, eine hohe Auslastung des UI-Threads und gibt an, ob dieser mit dem Einlesen von XAML (parsing), dem Layout, dem Rendering, Lese- und Schreiboperationen (I/O) anderem prozeduralem Code (App Code) oder anderen XAML Tätigkeiten (Xaml Other) beschäftigt war. Durch diese Informationen können rasch Rückschlüsse auf Performanceprobleme wie Ladeverzögerungen oder Ruckeln gezogen werden.
Abbildung 5: Das Application Timeline Tool
Von der Übersicht des Timeline Tools kann per drill-down in die Detailansicht gewechselt werden. Diese schlüsselt die Aktivitäten weiter auf. In Abb. 6 können neben jeder einzelnen Garbage Collector-Aktivität und jedem Diskzugriff auch die Layoutprozesse aller visuellen Elemente angeschaut werden. So können kostspielige Layout-Operationen auf kritische Controls eingegrenzt und optimiert werden.
Abbildung 6: Die Detailauswertung des Timeline Tools
Mit der Version 2015 hat Visual Studio im Bereich Debugging und Troubleshooting von Windows Client-Anwendungen einen grossen Sprung nach vorne geschafft. Viele Werkzeuge, die früher nur von Drittanbietern erworben werden konnten, sind jetzt in der Entwicklungsumgebung mit dabei.
Kommen sie in die DevSession (WPF Troubleshooting in Visual Studio 2015, 21.06.2016 16:45 – 18:45, http://www.developer-week.de/Programm/Veranstaltung/(event)/20570) und lernen sie diese wertvollen Tools kennen und legen sie auch mal selbst Hand an. Vielleicht führen Sie durch die Kenntnisse der neuen Tools beim nächsten Performanceproblem das Team aus der Krise?