Mit Visual Studio Ultimate ist es schon lange möglich Prozess-Abbilder (Dump) mit Hilfe der Memory Diagnostics zu analysieren. Microsoft schließt mit der Veröffentlichung der neuen Version von Visual Studio eine Lücke beim Analysieren dieser Abbilder, zuvor musste zwingend zusätzliche Werkzeuge verwendet werden.
Zu den bestehenden Funktionen ausschließlich nativen Code und Code bestehend aus sowohl nativen als auch managed zu debuggen, sind in Visual Studio Ultimate 2013 zwei weitere Möglichkeiten ein Dump mit Memory Diagnostics zu analysieren hinzu gekommen:
- Debug with Managed Only und
- Debug Managed Memory
Dumps erzeugen
Prozess-Abbilder können mit einer Vielzahl von Werkzeuge erzeugt werden. Windows liefert bereits dafür mit dem Task Manager eine rudimentäre Möglichkeit. Andere Werkzeuge besitzen erweiterte Fähigkeiten. ProcDump von SysInternals kann zum Beispiel beim Auftreten von bestimmten Fehler automatisch ein Abbild erzeugen.
Bisherige Funktionen
Mit Hilfe der bisherigen Funktionen “Debug with Mixed” und “Debug with Native Only” konnten Dumps gedebuggt werden. Die entweder aus nativen oder gemischt aus nativen und gemanaged Code bestehen. Dabei springt der Debugger von Visual Studio in den Zustand des Zeitpunktes des Erstellens des Abbildes. Dadurch lassen sich die Werte der einzelnen Objekte analysieren, wie auch den Call Stack. Hierbei sind aber Symbole, in PDB-Dateien persistiert, von Nöten. Diese können automatisch vom Microsoft Symbol Server bezogen werden, oder müssen manuell Visual Studio publik gemacht werden.
Debug with Managed Only
Mit “Debug with Managed Only” lässt sich ein Dump debuggen, welcher ausschließlich Assemblys (Managed Code) berücksichtigt, Nativer Code wird hierbei außen vor gelassen. Dazu sind wiederum die dazugehörigen Symbole notwendig. Ein Vorteil dieses Moduses hierbei ist, dass der Debugger nur Assemblys lädt und somit sich der Dump schneller debuggen und diagnostizieren lässt. Die Funktionsumfang ist während des Debuggens der gleiche wie bei Mixed und Native only. Eine Einschränkung in diesem Fall ist, dass Anwendungen mit nativen Code-Anteil nicht vollständig diagnostiziert werden kann.
Debug Managed Memory
In älteren Visual Studio Versionen als 2013 musste, wenn ein Dump-File auf ihre Objekte analysiert werden soll. Auf andere Werkzeuge zurückgegriffen werden. In Visual Studio Ultimate 2013 ist dieses Szenerio nun von Haus aus realisierbar.
Ist eine Dump-Datei in Visual Studio 2013 geladen, kann diese über “Debug Managed Memory” gedebuggt werden. Visual Studio analysiert den Dump auf dessen Objekte. Anders als bei “Debug with …”, werden hierfür keine PDB-Dateien benötigt. In der Heap View-Ansicht sind die verwendeten Klassen zu sehen, eine Ebene tiefer, deren Instanzen. In den Spalten stehen weitere Informationen wie Anzahl der Instanzen einer Klasse, Größe jedes Artefakts und die insgesamte Größe aller Kinder-Objekte.
Zusätzlich kann noch eine Baseline ausgewählt werden, diese ist ebenfalls ein Dump. Dadurch werden die zwei Dump-Dateien miteinander verglichen, es werden zu jeder der oben genannten Spalten eine weitere eingeblendet. Darin sind die Unterschiede zwischen den Werten aus beiden Dump-Dateien gelistet.
Mit einem Klick auf eines der Instanzen, erscheinen im unteren Bereich des Fensters unter “Paths to Root” die Pfade der anderen Objekte die das Objekt verwenden. Unter “References” Instanzen, die von der ausgewählten Instanz referenziert werden.
Fazit
Mit den neuen Möglichkeiten von Memory Diagnostics des Visual Studio lassen sich einfach Process-Dumps analysieren und so auf potentielle Probleme der Anwendung Rückschlüsse ziehen. Hierfür sind nicht einmal PDB-Dateien der Assemblies nötig. Einziger Wermutstropfen ist, dass ausschließlich Ultimate-Nutzer in Genuss dieses Features kommen.