Toolmentor: Laufzeitleistung mit den Tools von Rational PurifyPlus analysieren (Windows und UNIX)
Dieser Toolmentor beschreibt, wie Sie mit den Tools von Rational PurifyPlus Code schreiben können, der keine Speicherfehler und Speicherlecks aufweist, den Hauptspeicher effizient nutzt und eine optimale Leistung liefert.
Tool: Rational PurifyPlus
Beziehungen
Zugehörige Elemente
Hauptbeschreibung

Dieser Toolmentor gilt für Microsoft-Windows- und UNIX-Systeme.

Zu den Tools von PurifyPlus gehören Rational Purify, Rational PureCoverage und Rational Quantify.

Symbol für Buch Wenn Sie mehr über die Tools von PurifyPlus erfahren möchten, lesen Sie das Handbuch Getting Started zu PurifyPlus (Windows- oder UNIX-Version).

Symbol für Onlinehilfe Schrittweise Informationen zu den Tools von PurifyPlus finden Sie in der Onlinehilfe zum Tool.

Analyse der Laufzeitleistung

Die Analyse der Laufzeitleistung umfasst Folgendes:

  • Speicherfehler und Speicherlecks aufdecken (C/C++-Programme unter Windows und UNIX).
    • Verwenden Sie Purify, um diese Probleme im eigenen Code und in den Komponenten, die von Ihrer Software verwendet werden (auch wenn Sie den Quellcode nicht haben) genau aufzuzeigen.
    • Verwenden Sie PureCoverage, um sicherzustellen, dass der gesamte Code abgedeckt ist. (Sie können PureCoverage auch unabhängig von Purify verwenden, um Abdeckungsdaten für C/C++-, Java- und von .NET verwaltetem Code zu erfassen. )
  • Profil für Speicherbelegung erstellen (verwalteter Java- und .NET-Code unter Windows). Verwenden Sie Purify, um aufzuzeigen, wo Hauptspeicher ineffizient verwendet wird.
  • Profil der Leistung erstellen (Windows und UNIX). Verwenden Sie Quantify, um aufzuzeigen, wo Ihr Programm die meiste Zeit verbringt, um so die wichtigsten Leistungsengpässe auszuschalten.

Durch Laufzeitanalyse mit den Tools von PurifyPlus erhalten Sie einen fehlerfreien Code, der mit maximaler Effizienz arbeitet.

Toolschritte

Führen Sie die folgenden Schritte aus, um die Leistungsanalyse mit den Tools von PurifyPlus durchzuführen:

1. Programm unter Purify ausführen, um Speicherfehler, Speicherlecks und Abdeckungsdaten zu erfassen (C/C++-Programme unter Windows und UNIX) 

Purify erkennt schwer zu findende Laufzeitfehler, einschließlich Speicherlecks im eigenen Code und in den Komponenten, die von Ihrer Software verwendet werden. Das Tool berichtet Speicherfehler wie Fehler bei Bereichsgrenzen, Zugriff auf nicht mehr verwendete Zeiger, nicht initialisierte Leseoperationen im Speicher, Fehler bei der Hauptspeicherzuordnung und Speicherlecks, die Sie so beheben können, bevor sie Schaden anrichten. Wenn Sie Rational PureCoverage auf Ihrem System installiert haben, können Sie auch die Teile Ihres Codes sehen, die Sie getestet haben und die Sie nicht getestet haben.  

Gehen Sie zum Ausführen Ihres Programms unter Purify wie folgt vor:

  • Auf einem Windows-System:
    • Wenn Sie in Microsoft Visual Studio 6 arbeiten, wählen Sie zuerst in Visual Studio den Menüpunkt Purify > Engage Purify Integration aus. Ist PureCoverage auf Ihrem System installiert, wählen Sie außerdem Purify > Collect Coverage Data aus. Damit wird Purify angewiesen, die Codeabdeckung zu überwachen. Führen Sie anschließend Ihr Programm wie gewohnt in Visual Studio aus.
    • Wenn Sie Purify als eigenständiges Programm verwenden, d. h. nicht in Visual Studio integriert, wählen Sie File > Run aus. Wählen Sie im Dialog "Run Program" Collect error, leak, and coverage data (bzw. Collect error and leak data, falls PureCoverage nicht auf dem System installiert ist) aus und führen Sie Ihr Programm aus.
  • Fügen Sie auf einem UNIX-System das Wort purify am Anfang der Compiler/Linker-Zeile hinzu. Wenn Sie PureCoverage auf Ihrem System installiert haben, fügen Sie außerdem purecov hinzu. Beispiel:
    % purify purecov cc -g hello_world.c
    Führen Sie anschließend das Programm wie gewohnt aus.
Während Sie das Programm ausführen, listet Purify die Laufzeitfehler im Purify Viewer auf. Wenn Sie das Programm beenden, berichtet Purify die Speicherlecks.

Untersuchen Sie die Nachrichten-Header, um die kritischen Fehler herauszufinden. Erweitern Sie die Nachrichten, um ausführlichere Diagnoseinformationen und den Code, der den Fehler erzeugt hat, anzuzeigen. Über den Viewer können Sie den Quellcode in Ihrem Editor öffnen. Im Editor wird direkt die Zeile angezeigt, in der der Fehler aufgetreten ist, so dass Sie die Korrektur sofort vornehmen können.

Nachdem Sie die Fehler behoben und das Programm erneut erstellt haben, überprüfen Sie Ihre Korrekturen, indem Sie das aktualisierte Programm erneut ausführen und die neuen Ergebnisse mit denen des vorherigen Durchlaufs vergleichen. Wiederholen Sie diesen Zyklus von Instrumentierung und Ausführung, Analyse und Korrektur, bis Ihr Programm fehlerfrei läuft.

Wenn Sie Abdeckungsdaten für die Programmdurchläufe erfasst haben, können Sie auch die Teile Ihres Codes sehen, die Sie nicht auf Fehler überprüft haben. Verwenden Sie diese Informationen, um den Umfang Ihrer Laufzeitanalyse anzupassen, so dass Sie alle Fehler in Ihrem Programm finden, wann immer sie auch auftreten.

Symbol für Onlinehilfe Weitere Informationen finden Sie in den folgenden Themen im Index der Onlinehilfe zu Purify:

  • running programs
  • Purify messages
  • source code
  • coverage data

2. Programm unter Purify ausführen, um ineffiziente Speicherbelegung aufzudecken (verwalteter Java- und .NET Code unter Windows) 

Mit Purify können Sie Speicherprobleme in verwaltetem Java- und .NET-Code feststellen. Sie können mit Purify feststellen,

  • wie viel Speicher Ihr Programm verwendet,
  • wie viel neuen Speicher Ihr Programm für eine bestimmte Gruppe von Aktionen verbraucht,
  • welche Methoden und Objekte in Ihrem Programm so viel Speicher verbrauchen,
  • welche Objekte möglicherweise verhindern, dass nicht benötigte Objekte von der Garbage-Collection erfasst werden,
  • an welchen Stellen es empfehlenswert wäre, eine Garbage-Collection durchzuführen, um die Leistung zu verbessern.
Gehen Sie zum Ausführen Ihres Programms unter Purify wie folgt vor.
  • Wenn Sie in Microsoft Visual Studio .NET, IBM WSWB oder IBM WSS AD arbeiten, wählen Sie zuerst den Menüpunkt PurifyPlus > Purify > Engage Purify Integration aus. Führen Sie anschließend das Programm wie gewohnt aus.
  • Wenn Sie Purify als eigenständiges Programm, d. h. nicht integriert in Visual Studio .NET oder WSWB/WSS AD, verwenden, wählen Sie in der Benutzerschnittstelle von Purify File > Run aus. Wählen Sie im Dialog "Run Program" die Option Collect memory profiling data aus und führen Sie Ihr Programm aus.
Nachdem Ihr Programm die Initialisierungsprozeduren abgeschlossen hat, verwenden Sie den Purify-Befehl für Momentaufnahme, um eine Benchmark der Speicherbelegung zu diesem Zeitpunkt zu erstellen. Mit der Momentaufnahme als Basis können Sie untersuchen, wie Ihr Programm den Speicher während der Ausführung verwendet.   

Sobald Sie die Momentaufnahme haben, können Sie Aufzeichnungen darüber erstellen, wie Ihr Programm den Speicher während der Ausführung verwendet. Führen Sie die Teile des Programms aus, in denen Sie das Speicherleck vermuten. Purify zeigt einen Graphen zur Hauptspeicherzuordnung an, der Echtzeitschwankungen in der aktuellen Speicherbelegung aufzeigt. Wenn Sie einen Anstieg des zugeordneten Hauptspeichers beobachten, erstellen Sie eine weitere Momentaufnahme.

Vergleichen Sie die beiden Momentaufnahmen, um die potenziellen Methoden für ein Speicherleck zu ermitteln. Beenden Sie das Programm und vergleichen Sie die beiden Momentaufnahmen. Purify zeigt einen Aufrufgraphen an, der die Methoden zeigt, die während der Programmausführung zwischen der ersten und der zweiten Momentaufnahme die größten zugeordneten Hauptspeichermengen aufweisen. Sie können sich auf spezielle Methoden im Aufrufgraphen konzentrieren, um diese näher zu untersuchen.

Wenn der einer Methode zugeordnete Speicher unerwartet hoch ist, überprüfen Sie Ihren Quellcode und überarbeiten Sie ihn gegebenenfalls, um Speicher freizugeben, wenn dieser nicht mehr benötigt wird.

Nachdem Sie die Methoden identifiziert haben, die Speicherprobleme zu haben scheinen, analysieren Sie diese Methoden auf Objektebene. Suchen Sie nach Objekten, die eigentlich hätten freigegeben und von der Garabage-Collection erfasst werden müssen, aber nicht wurden, weil möglicherweise andere Objekte unnötigerweise auf sie verweisen.  

Symbol für Onlinehilfe Weitere Informationen finden Sie unter den folgenden Stichpunkten im Index der Onlinehilfe zu Purify:

  • running programs
  • comparing runs
  • data browser

3. Programm unter Quantify ausführen, um Leistungsengpässe zu ermitteln (Windows und UNIX).

Quantify liefert einen vollständigen, genauen und leicht interpretierbaren Satz mit Leistungsdaten zu Ihrem Programm und seinen Komponenten, so dass Sie Leistungsengpässe in Ihrem Code identifizieren und beseitigen können.

Gehen Sie wie folgt vor, um das Programm unter Quantify auszuführen, um Leistungsdaten zu erfassen:

  • Auf einem Windows-System:
    • Wenn Sie in Microsoft Visual Studio 6 arbeiten, wählen Sie zuerst in Visual Studio den Menüpunkt Quantify > Engage Quantify Integration aus. Führen Sie anschließend Ihr Programm wie gewohnt in Visual Studio aus.
    • Wenn Sie in Microsoft Visual Studio .NET, IBM WSWB oder IBM WSS AD arbeiten, wählen Sie den Menüpunkt PurifyPlus > Quantify > Engage Quantify Integration aus. Führen Sie anschließend das Programm wie gewohnt aus.
    • Wenn Sie Quantify als eigenständiges Programm, d. h. nicht in Visual Studio oder WSWB/WSS AD integriert, verwenden, wählen Sie in der Benutzerschnittstelle von Quantify File > Run aus, um Ihr Programm auszuführen.
  • Fügen Sie auf einem UNIX-System das Wort quantify am Anfang der Compiler/Linker-Zeile hinzu. Beispiel:
         % quantify cc -g hello_world.c
    
    Führen Sie anschließend das Programm wie gewohnt aus.

Während Sie den Code ausführen, zeichnet Quantify Daten zur Leistung Ihres Programms auf und zeigt die Aktivität seiner Threads und anderen Programmteile an. Wenn Sie das Programm beenden, hat Quantify ein genaues Profil der Programmleistung, mit dem Sie Engpässe finden und diagnostizieren können.

Die Quantify-Datenabzeige enthält Folgendes:

  • einen Aufrufgraphen, der die aufrufende Struktur und die Leistung der Funktionen im Programm grafisch darstellt,
  • ein Fenster mit einer sortierbaren Funktionsliste, in der alle Funktionen mit Leistungsdaten aufgeführt sind,
  • ein Fenster mit Funktionsdetails, in dem Daten für eine bestimmte Funktion, die Module, die die Funktion aufrufen, und die Module, die die Funktion aufruft, angezeigt werden,
  • ein Fenster mit der kommentierten Quelle, in dem die Leistungsdaten zeilenweise anhand einer Kopie des Quellcodes gezeigt werden.

Mit den erfassten Daten sind Sie in der Lage, Leistungsengpässe wie unnötige Berechnungen und Neuberechnungen, verfrühte Berechnungen oder übermäßig viele und kostenintensive Bibliotheksaufrufe zu identifizieren.

Nachdem Sie Ihren Code modifiziert und die Engpässe beseitigt oder verringert haben, führen Sie das Programm erneut unter Quantify aus. Vergleichen Sie anschließend die neuen Ergebnisse mit denen des vorherigen Durchlaufs, indem Sie eine Differenzdatei erstellen, die klare Aussagen über Leistungsverbesserungen und -rückschritte macht.

Weitere Informationen finden Sie in den folgenden Themen im Index der Onlinehilfe zu Quantify:

  • running programs
  • comparing runs
  • call graph window
  • annotated source window