Ruprecht Karls Universitšt Heidelberg

Werkzeuge

From Informatik-Vorkurs
Jump to: navigation, search

Im Verlauf des Kurses werden anhand einfacher Beispiele und √úbungen die Grundlagen der Programmierung und der Sprache C++ vermittelt. Dazu m√ľssen auch die wichtigsten Werkzeuge wie UNIX, Editor, Compiler und Linker rudiment√§r beherrscht werden. Es wird bewu√üt auf den Einsatz einer Integrierten Entwicklungsumgebung, wie z.B. Eclipse, verzichtet.


Die Shell

Die Shell, auch Commandline, Kommandozeile oder Eingabeaufforderung, ist ein Programm, das als Umgebung verwendet wird, um andere Programme zu starten. Die meisten Shells enthalten zus√§tzlich eine mehr oder weniger m√§chtige Skriptsprache, mit der komplexe Abl√§ufe automatisiert werden k√∂nnen. Unter Linux ist mindestens eine Shell bereits mit dem System installiert, nicht selten die "bash", kurz f√ľr Bourne Again Shell. Diese Shell ist auch auf Mac OS X bereits installiert. Sie finden Sie im "Dienstprogramme"-Ordner unter dem Namen "Terminal". Unter Windows gibt es zwar auch eine Kommandozeile, diese unterscheidet sich jedoch teilweise sehr deutlich von den unter UNIX-Systemen verbreiteten Shells. Wenn man eine entsprechende Shell auch unter Windows verwenden m√∂chte, bietet sich die MSYS Umgebung des MinGW Projekts an.

Im folgenden wird die Auforderung zur Eingabe immer durch ein ">" gekennzeichnet, der nachfolgende Text mu√ü √ľber die Tastatur eingegeben werden bzw. handelt es sich um die Ausgaben des jeweils aufgerufenen Programms.

Beispiel:

 > echo Hallo
 Hallo

Der Editor

Um ein Programm zu schreiben, ben√∂tigen Sie einen Editor. Hier reicht die Palette von einfachen textbasierten Editoren wie "nano" oder "pico" √ľber die sehr leistungsf√§higen, aber anfangs gew√∂hnungsbed√ľrftigen, Editoren "vim", respektive "gvim", oder "emacs" bis hin zu komfortablen Entwicklungsumgebungen. Ein brauchbarer Mittelweg ist beispielsweise "gedit" ('gnome editor'). Auf dem Macintosh bietet sich z.B. das kostenlose Programm TextWrangler (sie Seite war beim letzten Test nicht verf√ľgbar...) von BareBones an. Unter Windows gibt es z.B. mit Notepad++ einen freien Editor.

Ein nicht zu untersch√§tzender Punkt bei der Wahl des "richigen" Editors ist eine Unterst√ľtzung der verwendeten Programmiersprache. Dabei werden Schl√ľsselw√∂rter farblich hervorgehoben, was das Lesen des Quelltextes erheblich erleichtert.

Der GNU Compiler

Im Kurs wird der GNU Compiler verwendet. Wenn Sie zuhause Programme mit dem GCC √ľbersetzen wollen, m√ľssen Sie evtl. zuerst die n√∂tigen Programme installieren. Unter Linux mu√ü hierzu ggf. das Paket g++ installiert werden. Auf dem Mac m√ľssen Sie die Developer Tools installieren, die sich auf der mitgelieferten DVD befinden. Unter Windows k√∂nnen Sie MinGW nutzen oder die freie Entwicklungsumgebung (incl. Compiler) Code::Blocks installieren.

Um ein Programm zu √ľbersetzen, rufen Sie g++ wie folgt auf:

 > g++ -Wall -c hello.cc

Dabei ist "g++" das Programm, "-Wall" ist ein Optionsschalter, der zus√§tzliche Warnungen beim √úbersetzen ausgibt und "-c hello.cc" weist den √úbersetzer an, die C++ - Datei "hello.cc" zu √ľbersetzen.

Den Schalter "-Wall" zu verwenden mag gerade zu Anfang verwirrend viele Meldungen produzieren. Er ist jedoch oft bei der Fehlersuche sehr hilfreich, da der √úbersetzer einige Meldungen ausgibt, die auf zwar syntaktisch korrekte aber semantisch fragw√ľrdige Stellen im Quelltext hinweisen. Gew√∂hnen Sie sich an, diese Option zu nutzen!

Grundsätzlich gilt bei Fehlermeldungen und Warnungen: immer bei der allerersten (obersten) Meldung anfangen und immer einer Meldung nach der anderen nachgehen. Wenn Sie gleich 2 Seiten sehr verwirrende Fehlermeldungen bekommen, dann haben Sie sehr wahrscheinlich ein Problem mit dem 'stream' Operator <<, z.B. weil Sie eine Variable auszugeben wollen, deren Typ '<<' noch nicht kennt.

Ist der Übersetzungsvorgang erfolgreich gewesen, so gibt es jetzt eine zusätzliche Datei im Verzeichnis mit dem Namen "hello.o"

 > ls
 hello.cc  hello.o

Hierbei handelt es sich um eine sogenannte Objektdatei (das hat aber nichts mit Objektorientierung zu tun), die in einem weiteren Schritt mit anderen Objektdateien und Bibliotheken zu einem Programm gebunden werden muss. Um die Objektdatei nur mit der C++ Standardbibliothek zusammen zu binden geben Sie folgendes ein:

 > g++ -o hello hello.o

Das Programm "g++" wird jetzt als Linker eingesetzt, bzw. sammelt eigentlich im wesentlichen nur die n√∂tigen Informationen und reicht diese an den tats√§chlichen Linker (das Programm "ld") weiter. Die Option "-o hello" gibt hierbei an, wie das ausf√ľhrbare Programm hei√üen soll. Wird dies weggelassen, wird das Programm "a.out" genannt. Wenn weitere, eigene Programmteile mit eingebunden werden sollen, so werden die weiteren Object-Files hinten angeh√§ngt.

Nach erfolgreichem Binden kann das Programm schließlich aufgerufen werden:

 > ./hello
 Hallo Welt!

Wichtig ist hier, dass dem Programmnamen der Pfad vorangestellt wird, im einfachsten Fall ist dies der aktuelle Pfad "./". Wird dies vergessen, bekommt man im besten Fall die lapidare Fehlermeldung, dass das Programm nicht gefunden werden konnte. Wenn andere Programme mit dem selben Namen existieren kann es passieren, dass tatsächlich ein anderes Programm aufgerufen wird. (Benennen Sie "hello" einfach mal um zu "ls" und rufen Sie es einmal mit Pfad und einmal ohne auf.)

Der GNU Debugger

Hat man erst einmal alle Tippfehler (Syntaxfehler) beseitigt, verbleiben oft noch Denkfehler im Programm. Diese kann man z.B. durch die Ausgabe von Zwischenergebnissen suchen. Ein sehr mächtiges Werkzeug zur Fehlersuche ist der Debugger. Dieser läuft, vereinfacht gesagt, parallel zum Programm, und erlaubt es z.B.

  • das Programm Schritt f√ľr Schritt zu durchlaufen,
  • zu beobachten, wie sich Werte jeweils √§ndern,
  • das Programm automatisch anzuhalten, sobald eine bestimmte Stelle erreicht ist oder
  • das Programm anzuhalten wenn sich ein bestimmter Wert √§ndert.

Prinzipiell arbeitet der Debugger auch ohne die Unterst√ľtzung des Compilers, aber ohne die entsprechende Integration m√ľ√üte man das Programm in Maschinensprache analysieren, was nur f√ľr Erfahrene und Abenteurer wirklich interessant ist. √úbersetzt man sein Programm jedoch mit entsprechender Unterst√ľtzung, arbeitet der Debugger komfortabel auf der Ebene der Programmiersprache. Hierzu m√ľssen die Programme mit der Option "-g" √ľbersetzt und gebunden werden:

 > g++ -Wall -g -c hello.cc
 > g++ -g -o hello hello.o

Den GNU Debugger starten Sie mit

 > gdb ./hello
 ...
 (gdb)

Der Debugger ist Kommandogesteuert, die Aufforderung (das prompt) ist (gdb). Mit dem Kommando help bekommen Sie Hilfe zu den verschiedenen Themen. Anfangs ist es etwas gew√∂hnungsbed√ľrftig, sich in der Hilfe zurechtzufinden. Einige wichtige Kommandos sind:

  • quit: Debugger verlassen
  • list: Quelltext in der aktuellen Umgebung ausgeben.
  • break: Einen Unterbrechungspunkt setzen. Das Kommando akzeptiert unter anderem eine Zeilennummer oder den Namen einer Funktion. Um z.B. einen Unterbrechungspunkt am Anfang des Programms zu setzen, geben Sie "break main" ein.
  • watch: Einen automatischen Unterbrechnungspunkt erstellen, der das Programm unterbricht, sobald sich ein Ausdruck ver√§ndert.
  • start / run: Das Programm wird bis zum n√§chsten Unterbrechungspunkt ausgef√ľhrt. "start" f√ľgt automatisch einen Unterbrechungspunkt am Anfang von main() ein.
  • continue: Nach einer Unterbrechung fortzusetzen.
  • step: Einzelne Schritte ausf√ľhren
  • print: Einen Ausdruck anzeigen.

Installationen unter Windows

Um unter Windows die GNU Werkzeuge zu benutzen gibt es mehrere Wege. Einige Möglichkeiten sind hier aufgelistet.

MinGW

Die Umgebung MinGW (Minimalist GNU for Windows) haben in der Vergangenheit mehrere Leute (auch ich) erfolgreich verwendet.

Eine (im WS1314 erfolgreiche Methode) folgt der Installationsanleitung auf der MINGW Seite, die im linken Navigationsbar zu finden ist. Falls der Installer nicht funktioniert, m√ľssen die (>18!) Pakete einzeln heruntergeladen und installiert werden (1/2h...).

Alternativ kann man bei sourceforge nach der neuesten Version des MinGW-MSYS Bundle nutzen, z.B. durch Suche nach MSYS. Diesen gemeinsamen Installer habe ich (PF) noch nicht ausprobiert, ich w√§re f√ľr Feedback/Erfahrungen oder eine genauere Anleitung dankbar...

Cygwin

Eine alternative Installation findet man unter Cygwin, ich habe das aber nicht ausprobiert.

Code::Blocks

Im letzten Kurs hat jemand wohl problemlos und erfolgreich die IDE Code::Blocks installiert.


Personal tools