Einführung in MS Visual Studio 2008 1. Erste Projektmappe, erstes Projekt und erstes C++-Programm Visual Studio 2008 unterstützt die Organisation von Programmierprojekten in Form von Lösungen, d.h. Gruppen von Projekten, die zu Projektmappen zusammengefasst werden. Zu jedem Projekt gibt es also mindestens eine Projektmappe. Ein Projekt kann aber auch zu mehreren unterschiedlichen Projektmappen gehören. Übungen zur Lehrveranstaltung Programmieren 3 : Jede Programmier-Übungsaufgabe entspricht einem Projekt. Diese Übungsprojekte sollen in einer Projektmappe mit dem Namen PR3 zusammengefasst werden. 1.1. Anlegen der Projektmappe PR3: 1. Starten Sie das Programm Microsoft Visual Studio : Start Anwendungen Microsoft Visual Studio 2008 (oder ähnlich) 2. Erzeugen Sie eine leere Projektmappe mit dem Namen Programmieren2: Datei Neu Projekt Wählen Sie wie im folgenden Bild dargestellt den Projekttyp Visual Studio-Projektmappen (unter Andere Projekttypen ) aus. Geben Sie den Namen sowie Speicherort (denken Sie an H-Laufwerk!) und drücken Sie den Knopf OK :
1.2. Hinzufügen eines neuen Projekts mit einem kleinen C/C++-Programm: Achtung: Für jede Aufgabe bzw. jedes C-Programm müssen Sie ein Projekt anlegen. Denken Sie an eine geeignete Namensgebung der Projekte. 1. Erzeugen Sie ein neues leeres Projekt: Datei Hinzufügen Neues Projekt Projekttyp: Visual C++ Projekt Win32 Vorlage: Win32-Projekt (Win32-Konsolenanwendung geht auch) Name: Uebung07a1 Speicherort: H:\Programmieren2 Öffnen Sie nun im Assistenten zunächst die Anwendungseinstellungen und aktivieren Sie: Konsolenanwendung Leeres Projekt Drücken Sie auf den Knopf Fertig stellen.
2. Fügen Sie zum Projekt eine leere C/C++-Datei hinzu: Projekt Neues Element hinzufügen (Achten Sie darauf, dass im Projektmappenexplorer das Projekt Uebung07a1 aktiv ist!) Kategorie: Code Vorlage: C++-Datei(.cpp) Name: zahl.c Speicherort: H:\Programmieren2/Uebung07a1 Drücken Sie auf den Knopf Hinzufügen.
3. Ändern Sie die Projektoptionen: Die Optionen für ein Projekt können auf den Eigenschaftsseiten festgelegt werden. Standardmäßig ist die Compiler-Warnungsstufe 3 eingestellt. Besser ist es aber, mit der höchsten Warnungsstufe 4 zu übersetzen. Klicken Sie mit der rechten Maustaste im Projektmappenexplorer das Projekt Uebung07a1 an und wählen Sie im Kontextmenü den Punkt Eigenschaften. Konfiguration: Alle Konfigurationen Konfigurationseigenschaften C/C++ Allgemein Warnungsebene: Level 4 4. Geben Sie im Editor den folgenden Quelltext ein und speichern das Programm: /* zahl.c */ #include <stdio.h> int main(void) { int zahl; printf("eine Zahl eingeben. Mit <ENTER> bestätigen!\n"); scanf("%d", &zahl); printf("die Zahl war: %d\n", zahl); } return 0; 5. Lassen Sie das Programm übersetzen (Erstellen Summe erstellen) und ausführen (Debuggen Starten ohne Debugging) Experimentieren Sie mit Visual Studio 2008 weiter:
Hinzufügen neuer Dateien zum Projekt: rechte Maustaste auf Projekt -> Hinzufügen. Löschen einer Datei aus dem Projekt: Die Datei mit der rechten Maustaste im Projektmappenexplorer anklicken und im Kontextmenü den Punkt Entfernen wählen. Achtung: Jedes C++-Programm startet mit main(), sodass main() in jedem Projekt genau einmal vorhanden sein muss! Neues Projekt: Datei -> neu ; Bevor dieses Projekt übersetzt werden kann, muss es als Startprojekt festgelegt werden (Kontextmenü = rechte Maustaste) Hilfe: öffnet MSDN (Microsoft Developer Network); Probieren Sie den Index aus, z.b. für limits.h 2. Verzeichnisstruktur und Dateien In Visual Studio 2008 werden Programmierprojekte in Projektmappen zusammengefasst / organisiert. Dabei wird von der IDE beim Anlegen der Projektmappen/Projekte und später beim Erstellen/Kompilieren der Projekte eine Vielzahl weiterer Dateien erstellt. Im Folgenden sollen die Wichtigsten kurz vorgestellt werden. Wir nehmen dabei an, dass wir eine Projektmappe mit dem Namen PR3 erzeugt haben und in dieser Projektmappe ein Projekt mit dem Namen ErstesProgramm. In dem Projekt ErstesProgramm wurde ein C++-Code-File hinzugefügt mit dem Namen Hallo.cpp. Der Projektmappen-Explorer zeigt dann die folgende Baumstruktur an: Im Datei-Explorer von Windows (rechte Maustaste auf Start ) gibt es jetzt 1. Ein Verzeichnis (Dateiordner) \PR3 mit den Projektmappe-Dateien. In diesem Verzeichnis wurden von VS zwei Dateien angelegt (sobald Sie die Projektmappe gespeichert haben):
1. eine Datei PR3.sln : hier werden die Projekte und ihre Elemente verwaltet 2. eine Datei PR3.suo: (solution user option) hier sind die Benutzeroptionen abgespeichert. 2. Ein Verzeichnis \PR3\ErstesProgramm: Projektverzeichnis des Projektes. In diesem Verzeichnis wurden von VS angelegt: 1. ErstesProgramm.vcproj: Dies ist eine XML-Datei, die die zum Erstellen eines Visual C++ Projektes erforderlichen Informationen enthält (zum Kompilieren, Linken, etc.; z.b. welche Elemente zum Projekt gehören, und wo sie zu finden sind, Optionen/Parameter für den Compiler, etc.). Diese Einstellungen können über die Eigenschaften des Projektes in VS (rechte Maustaste auf Projekt ) geändert werden. 2. Hallo.cpp : Enthält den im Editor eingegebenen Source-Code. Es gibt also z.b. kein Verzeichnis Quelldateien. Der Projektmappen-Explorer liest nicht die tatsächliche Dateistruktur, sondern sein Parameter-File PR3.sln und zeigt dann die entsprechenden Informationen in einer Verzeichnis-Baum-Struktur an, so dass man möglichst übersichtlich auf die Elemente der einzelnen Projekte zugreifen kann. Deswegen kann auch zum Beispiel eine Code-Datei zu mehreren Projekten hinzugefügt werden, ohne dass diese kopiert wird. Wird die Code-Datei dann in einem Projekt geändert, so hat sie sich auch für die anderen Projekte geändert!! Bei der Erstellung von Projekten (das heißt, dem Kompilieren/Linken etc. bis hin zum Erstellen des ausführbaren Programms) werden wieder einige Dateien erstellt. Im Projektverzeichnis ErstesProgramm gibt es ein Verzeichnis Debug, sobald sie einmal eine Debug- Version erstellt haben bzw. ein Verzeichnis Release, sobald Sie einmal eine Release-Version erstellt haben. Welche Version erstellt wird, wird im Konfigurationsmanager eingestellt (z.b. unter Erstellen -> Konfigurationsmanager). Wie schon der Name sagt: die Debug-Version ist zur Fehlersuche gedacht: das ausführbare Programm enthält noch so genannte Debugging-Informationen und ist nicht maximal optimiert, im Gegensatz zu einer Release-Version. Im Debug/Release Verzeichnis des Projektes gibt es 3. ein HTML-Logfile, in dem alle Warnungen/Fehlermeldungen/Ausgaben etc. während des letzten Erstell-Vorgangs gespeichert sind. Schauen Sie sich ein solches LogFile an. 4. Zu jedem C++-Code-File.cpp das kompilierte so genannte Object-File, im Beispiel also ein Hallo.obj. 5.. einige andere Dateien Im Debug / Release - Verzeichnis der Projektmappe gibt es 6. zu jedem Projekt das ausführbare Programm (Executable), im Beispiel ErstesProgramm.exe. (Öffnen Sie ein Befehlsfenster (außerhalb von VS) und starten Sie eines Ihrer Programme von der Kommando-Zeile aus). 7. zu jedem Projekt weitere Dateien mit Debugging- und Linking-Informationen. Übungen: 1. Orientieren Sie sich in der von Ihnen angelegten Projektmappe (in der ja hoffentlich schon mehrere Projekte sind) unter Benutzung des Windows-Datei-Explorers. Nutzen Sie die Gelegenheit zum Aufräumen. 2. Erstellen Sie von einem Programm/Projekt auch eine Release-Version. 3. Führen Sie ein Programm durch direkten Aufruf der exe-datei aus.
4. Werfen Sie einen Blick in eine.vcproj - Datei, mit einem normalen Texteditor und mit dem Internet-Explorer. 3. Fehlersuche (Debugging) Ein paar Möglichkeiten, wie Visual Studio die Fehlersuche unterstützt, wollen wir uns genauer anschauen: 3.1. Fehler beim Kompilieren / Erstellen Folgende Einstellungen können die Fehlersuche erleichtern: Zeilennummern anzeigen: Extras Optionen Texteditor C/C++ Allgemein Zeilennummern Fehlerliste mit genaueren Infos tabellarisch anzeigen: Ansicht Weitere Fenster Fehlerliste Sprung zu nächstem Fehler im Source-Code: Im Ausgabefenster auf grüne Pfeile klicken (linke Maustaste) Falls die Fehlerzeile in Ihrem Editorfenster nicht angezeigt wird: Extras Optionen Text-Editor Allgemein Indikatorrahmen 3.2. Fehlersuche bei einem erfolgreich erstellten Programm Auch wenn ein Programm/Projekt erfolgreich erstellt werden konnte, kann es auf Grund von subtileren Programmierfehlern während des Programmablaufes zu Programmabstürzen kommen, oder das Programm tut einfach nicht das, was Sie erwartet haben. Eine IDE (integrated development environment) verfügt daher immer über einen integrierten Debugger (d.h. ein Fehlersuchprogramm). Üblicherweise ermöglicht ein Debugger, das ausführbare Programm schrittweise und vom Benutzer gesteuert zu durchlaufen und während eines solchen Durchlaufes die Werte von Variablen etc. abzufragen und zu verfolgen. Zu diesem Zweck kann der Benutzer Haltepunkte (Breakpoints) im Quell-Code setzen, an denen das Programm dann bei der Ausführung anhält, oder das Programm Anweisung um Anweisung ausführen lassen ( Steppen ), etc.. Die Benutzung eines Debuggers erleichtert die Fehlersuche ungemein. Außerdem ist er sehr nützlich, wenn man eine Programmiersprache lernt. Um bei Ungewissheit ein Programmkonstrukt zu testen, lässt man das Programm anstatt viele Testausgaben auf die Konsole zu programmieren einfach im Debugger laufen und schaut sich quasi online an, was passiert. Daher eine Empfehlung: machen Sie sich frühzeitig mit dem Debugger vertraut und benutzen Sie ihn oft auch einfach einmal aus Neugierde um zu überprüfen, ob Ihr Programm den von Ihnen geplanten Ablaufplan verfolgt. Starten des Debuggers: Debuggen Debugging Starten Falls Sie keinen Haltepunkt gesetzt haben, wird das Programm ausgeführt. Am Ende schließt auch das Ausgabenfenster.
Haltepunkte setzten: Mit linker Maustaste in den linken grauen Balken neben dem Quell-Code klicken. Der Haltepunkt wird in der aktuellen Position des Cursors gesetzt und erscheint dort als roter Punkt, siehe Bild. Man kann auch Bedingungen setzen, wann an einem Haltepunkt angehalten wird (sinnvoll zum Beispiel in einer Zählschleife, wenn man vermutet, dass beim 101-ten Durchlauf etwas schief geht ). Diese und weitere Operationen mit Haltepunkten wie üblich über das Kontextmenü, d.h. rechte Maustaste auf den Haltepunkt. Schrittweise Ausführung: Es gibt drei Möglichkeiten 1. Prozedurschritt (Step): Die nächste Anweisung (im Allgemeinen eine Zeile) wird ausgeführt. Handelt es sich um einen Funktionsaufruf, so wird dieser Funktionsaufruf komplett abgearbeitet und das Programm bleibt hinter dem Funktionsaufruf stehen 2. Einzelschritt (Step In): Es wird die nächste Anweisung ausgeführt. Handelt es sich dabei um einen Funktionsaufruf, so bleibt das Programm vor der ersten Anweisung der aufgerufenen Funktion stehen. 3. Ausführen bis Rücksprung (Step Out): Die aktuell Funktion/Prozedur wird komplett abgearbeitet und das Programm hinter dem Rücksprung angehalten. Die Schrittweise Ausführung erfolgt entweder über das Menü Debuggen oder über Funktionstasten (siehe Debuggen ) oder durch Anklicken der folgenden Symbole (die erst nach Starten des Debuggin -Vorgangs in der Symbolleiste erscheinen): Fenster mit Liste der Haltepunkte wird angezeigt Einzelschritt (Step In) Prozedurschritt (Step) Ausführen bis Rücksprung (Step Out) Halten bei Bedingung / Trefferzahl: Über das Kontextmenü des Haltepunktes lassen sich Bedingungen bzw. Trefferzahl eingeben. Während des Debugging-Vorgangs werden Informationen über Variablen, Funktionsaufrufe etc. in verschiedenen Fenstern angezeigt (Falls diese nicht angezeigt werden: Debuggen Fenster Hilfreich sind: Aufrufliste: Zeigt die Hierarchie der aufgerufenen Funktionen Auto: Zeigt die aktuellen Variablen Lokal: Zeigt die lokalen Variablen ( z.b. der aktuellen Funktion) )