LabWindows/CVI – das Aus für Speicherlecks

Inhalt

Einleitung

Eine Stärke der C-Programmierung liegt darin, dass Anwender ihren Code hardwarenah optimieren können. Da C direkten Zugriff auf den Anwendungsspeicher und hardwarespezifische Funktionsaufrufe bietet, haben Entwickler eine bessere Kontrolle über den Programmumfang und die Ausführungsgeschwindigkeit.

Allerdings bringen Leistung und Flexibilität der Programmiersprache C eine komplexere Speicherverwaltung mit sich. Dies wird in vielen Lehrbüchern besprochen. In einem dieser Bücher heißt es:

„Die überwältigende Mehrheit an ‘Bugs’ und Abstürzen resultiert aus Problemen wie Speicherzugriffen sowie Speicherzuweisungen und -freigaben. Diese speicherbezogenen Fehler sind seit jeher schwierig zu lösen … Die meisten professionellen Programmierer erfahren erst durch die deswegen auftretenden Fehler von diesen Problemen.“

Seit LabWindows/CVI 9.0 steht mit dem Resource Tracking Window ein Tool zur Identifizierung und Behebung von Speicherlecks zur Verfügung, um frühzeitig im Entwicklungsprozess Probleme zu erkennen, noch bevor die Anwendung ausgeliefert wird.

Übersicht über das Resource Tracking Window

Seit mehr als zehn Jahren bietet LabWindows/CVI Funktionen zur automatischen Überprüfung von Array-Grenzen, um Speicherfehler zu vermeiden, die zu unerwartetem Verhalten führen können. LabWindows/CVI bietet User-Protection-Funktionen, die in der Regel nicht in C verfügbar sind, wie z. B. ein integriertes Tool zur Erkennung potenzieller Ressourcenlecks, die zu einem Leistungsverlust des Systems führen können.


Das neue Fenster zur Ressourcenüberprüfung (verfügbar im LabWindows/CVI Full Development System und in der NI Developer Suite) sorgt für die Aufzeichnung und Überprüfung aller zur Laufzeit allokierten Ressourcen u. a. dynamische Speicher, Datei- und Panel-Handles, GPIB/TCP-Handles und Thread-Pools. Des Weiteren ermöglicht das Tool die Anzeige des Quellcodes und Speichers, das Anhalten der Anwendung, wann und wo Ressourcen allokiert bzw. freigegeben werden und die Aufzeichnung dieser Informationen auf einem Datenträger zur späteren Überprüfung.

Wählen Sie im Dialogfeld Build Options den Punkt Debugging Options und dann Extended, um die interaktive Ressourcenüberprüfung zu aktivieren. Sie können die Ressourcenüberprüfung auch programmatisch über die Funktionen GetEnableResourceTracking und SetEnableResourceTracking aus der Utility-Bibliothek aktivieren und deaktivieren.

 

Verwendung des Resource Tracking Window

Die Spalte Ressourcen des Resource Tracking Window zeigt sowohl allokierte als auch wieder freigegebene Ressourcen, die in einem Programm zugewiesen werden. LabWindows/CVI zeigt neu zugewiesene Ressourcen mit rotem Text, bestehende zugewiesene Ressourcen in schwarzem und vor kurzem freigegebene Ressourcen in grauem Text an. Darüber hinaus sind die Ressourcen auch nach Kategorien gruppiert, geordnet z. B. nach Speicher, Toolbox, Ressourcen für Benutzeroberflächen usw. Nach einem Doppelklick in die Spalte Resources kann man direkt in die Zeile des Quellcodes navigieren, wo die Ressourcen zugewiesen wurden. Der Abschnitt Stack Trace im Resource Tracking Window zeigt die Reihenfolge der Funktionen (Call Stack), denen Ressourcen zugewiesen wurden. Dabei steht die zuletzt aufgerufene Funktion am Anfang und die ursprüngliche Funktion am Ende der Liste.

Das Resource Tracking, also die Ressourcenüberprüfung, steht für die Debugging Options Standard und Extended zur Verfügung. Das Resource Tracking wird im Dialogfeld Build Options unter Debugging Options und Extended aktiviert. Wird dann Standard ausgewählt, muss das Resource Tracking mit der Funktion SetEnableResourceTracking aktiviert werden. Um das Resource-Tracking-Fenster sichtbar zu machen, wird im aktiven LabWindows/CVI-Fenster Window»Resource Tracking gewählt. Ein Klick mit der rechten Maustaste auf die Spalte Ressourcen des Fensters Resource Tracking öffnet ein Kontextmenü mit folgenden Optionen:

Um das Resource-Tracking-Fenster sichtbar zu machen, wird im aktiven LabWindows/CVI-Fenster Window»Resource Tracking gewählt. Ein Klick mit der rechten Maustaste auf die Spalte Ressourcen des Fensters Resource Tracking öffnet ein Kontextmenü mit folgenden Optionen:

  • Go to Source—Markiert im Fenster Source die Zeilen, denen Ressourcen zugewiesen wurden..
  • View Memory—Öffnet das Fenster zur Speicheranzeige (Memory Display) und stellt die Speicherinhalte dar, die dem ausgewählten Objekt entsprechen.
  • Break on Deallocation—Specifies that LabWindows/CVI suspends your program when the resource is released.
  • Show/Hide Thread IDs—Blendet die Spalte Thread ID im Fenster Resource Tracking ein oder aus.
  • Clear Window—Spezifiziert, dass LabWindows/CVI das Programm anhält, wenn die Ressource freigegeben wird.
  • Load from File—Entfernt alle Objekte aus dem Fenster Resource Tracking.
  • Save to File—Speichert den aktuellen Inhalt des Fensters Resource Tracking für den späteren Gebrauch in eine Textdatei.
  • Sort—Öffnet das Dialogfeld Sort Tree, mit dem die Ressourcen im Fenster Resource Tracking geordnet werden können.
  • Find—Öffnet das Dialogfeld Find, mit dem Text innerhalb einer Spalte gesucht werden kann.
  • Expand Resource—Blendet die Ressourcenkategorie ein.
  • Collapse Resource—Collapses the resource category.
  • Expand All—Blendet alle Ressourcenkategorien aus.
  • Collapse All—Collapses all resource categories.
  • Release Window/Confine Window—LabWindows/CVI zeigt verschiedene Optionen an, abhängig davon, ob sich das Fenster Resource Tracking in der Window Confinement Region befindet. Release Window: Dieser Befehl entfernt das Fenster aus der Window Confinement Region. Confine Window: Dieser Befehl „sperrt“ das Fenster in die Window Confinement Region.

Ein Klick mit der rechten Maustaste auf den Abschnitt Stack Trace des Fensters Resource Tracking öffnet ein Kontextmenü mit folgenden Optionen:

  • Go to Source—Markiert im Fenster Source den Ort der gewählten Funktion.
  • Find—Öffnet das Dialogfeld Find, mit dem Text innerhalb einer Spalte gesucht werden kann.

Ein Klick mit der rechten Maustaste auf den Reiter des Fensters Resource Tracking öffnet ein Kontextmenü mit folgenden Optionen:

  • Close—Schließt das Fenster.
  • Release Window—Entfernt das Fenster aus der Debugging Region.

Da die Überprüfung von Ressourcen zusätzlichen Overhead verursacht, kann das Resource Tracking die Leistung des Programms beeinflussen.

 

Weiterführende Informationen

Evaluierung von LabWindows/CVI

Newsletter für LabWindows/CVI-Entwickler
Abonnieren Sie den vierteljährlich erscheinenden Newsletter – informieren Sie sich mithilfe von Tutorien, profitieren Sie von Tipps und Tricks und schlagen Sie selbst Themen für die nächsten Ausgaben vor.