Produktbesprechung: SNiFF+ für Linux

ArticleCategory: [Es gibt verschiedene Artikel Kategorien]

Software Development

AuthorImage:[Ein Bild von Dir]

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in en Guido Socher

en to de Harald Radke 

AboutTheAuthor:[Eine kleine Biographie über den Autor]

Guido ist ein langjähriger Linuxfan. Seine Linuxhomepage findet sich unter www.oche.de/~bearix/g/.

Abstract:[Here you write a little summary]

SNiFF+ von takefive software ist eine integrierte Entwicklungsumgebung, verfügbar für Linux.. Takefive bietet eine kostenlose Downloadversion unter http://www.takefive.com/penguin. Die hier getestete Software kam von einer Sample CD und scheint mit der herunterladbaren Version identisch zu sein. Die Beschränkung beider Versionen ist, daß sie auf 200 Dateien beschränkt ist. Dies ist eine Besprechung von SNiFF+ Version 3.2. Sie wurde unter Redhat Linux 6.0 getestet.

ArticleIllustration:[This is the title picture for your article]

[Illustration]

ArticleBody:[The article body]

Was ist SNiFF+ ?

SNiFF+ ist eine integrierte Entwicklungsumgebung (Integrated Development Environment) für die Sprachen C, C++, Java, IDL, Fortran77, Fortran90 und ADA. SNiFF+ bietet dir die Möglichkeit, deinen Code visuell zu verstehen. Benutzer von anderen großen Betriebssystemen sind viellicht schon an solche Entwicklungsumgebungen gewöhnt und sehr glücklich, zu sehen, daß eine solche IDE für Linux verfügbar ist.

SNiFF+ und IDEs im allgemeinen werden am besten in größeren Projekten benutzt und in Umgebungen, wo man Änderungen an exisierendem Code vornehmen muß, den man nicht vollständig selbst geschrieben hat. SNiFF+ unterstützt auch verschiedene version control tools wie RCS, CVS, clearcase, etc... Dies macht es wahrscheinlich ideal für Gruppenarbeit.

Installation

SNiFF+ für Linux kommt mit einem Installationsskript. Dieses Skript führt dich zu einem Dialogmode. Ich hatte keine Probleme, es zu benutzen. SNiFF+ ist nicht in Paketformaten wie rpm oder deb verfügbar, aber dies ist kein Problem, da SNiFF+ sich nicht über das gesamte Dateisystem installiert. Das Skript installiert alles nur in einem Verzeichnis (ich habe /opt/sniff benutzt) und es ist deshalb sehr einfach, es später wieder zu deinstallieren. Unten siehst du den Anfang des Installationsskripts mit den verschiedenen UNIX Plattformen, für die SNiFF+ verfügbar ist.


 
                    SNiFF+ 3.2 installation procedure
              Copyright (c) 1993-1999 TakeFive Software GmbH.
                             All rights reserved.
 
 Please select:
 
   [A]   Install SNiFF+ binaries
   [B]   Install GNU binaries
   [C]   Install FlexLM binaries
 
   [X]   Exit installation
 
 Your selection: a
 
 
 SNiFF+ can be installed for multiple platforms in one directory. It is also
 possible to install a SNiFF+ kit for a platform which is not the installation
 platform. Therefore, please select first the target platforms
 and then the installation platform.
 
 
 Enter the platform(s) for which you want to install SNiFF+:
 
 sunos       for Sun SPARC machines running SunOS4 (Solaris 1.x)
 solaris     for Sun SPARC machines running SunOS5 (Solaris 2.x)
 aix         for IBM Risc machines running AIX 4.x
 hpux        for HP 9000/7XX machines running HP-UX 10.x/11.x
 decalpha    for DEC/alpha machines running Digital UNIX 3.x/4.x
 irix        for SGI machines running IRIX 5.3 or later
 unixware    for PC's running SCO Unixware 7.x/2.x or OpenServer 5.x
 linux-glibc for PC's running Linux 2.x based on GNU glibc 2.1 (like RedHat 6.x)
 sinix       for SNI RM machines running Reliant Unix 5.4x
 
 Enter one name at a time (Leave empty to finish the selection).
 
 Target platform number 1 : linux-glibc
 Target platform number 2 :
 
 ....the script continues here with more questions.....

Eine Sache, über die ich bei der Installation gestolpert bin, war der Dialog, wo man "Vim 5.0 Vi Improved by Bram Moolenar" installieren konnte. Ich entschied mich, Vim nicht zu installieren, da ich ihn schon auf meiner Platte hatte. Dies stellte sich als Fehler heraus und ich mußte ihn später noch installieren. Die Vim version, die mit SNiFF+ zusammen kommt, ist eine spezielle Version. Sie hat die Fähigkeit, mit den anderen Werkzeugen der IDE zu kommunizieren. Deshalb muß man, wenn man Vi benutzen möchte, diesen speziellen Vim installieren.

SNiFF+ kann überallhin installiert werden. Deshalb mußt du nach der Vollendung der Installation zwei Dinge tun:

  1. setze die Umgebungsvariable SNIFF_DIR an die Stelle, wo du SNiFF+ installiert hast (/opt/sniff in meinem Fall).
  2. Erweitere den PATH um das SNIFF_DIR/bin Verzeichnis (/opt/sniff/bin in meinem Fall)
Abhängig von der benutzen shell mußt du entweder /etc/profile, ~/.bashrc für bash oder /etc/csh.cshrc, .tcshrc für tcsh editieren oder was auch immer es für eine rc Datei für deine Shell ist. Wenn du die shell-rc-Dateien nicht editieren möchtest, kannst du dieses kleine wrapper script benutzen, das ich startsniff genannt habe:
#!/bin/sh
PATH="$PATH:/opt/sniff/bin"
export PATH
MANPATH="$MANPATH:/opt/sniff/man"
export MANPATH
SNIFF_DIR=/opt/sniff
export SNIFF_DIR
#start sniff now:
sniff

Dokumentation

tutorial in netscape

SNiFF+ kommt mit einem sehr netten Dokumentationssystem in html. Es scheint die Möglichkeit zu geben, die Dokumentation von Postskriptdateien aus zu drucken, aber ich hatte nie das Gefühl, daß ich dies bräuchte, da die html Dokumentation gut ist. Wenn SNiFF+ mit dem Befehl sniff gestartet wird, wird zunächst ein Willkommensbildschirm angezeigt. Dieser Begrüßungsbildschirm gibt dir die Möglichkeit, direkt zur programmiersprachenspezifischen Dokumentation zu gehen. Auswählen dieses Punktes startet dann Netscape mit dem dazugehörenden Tutorium. Ich würde jedem empfehlen, zumindest einmal schnell durch das Tutorium zu gehen.


Wichtige Komponenten von SNiFF+


Das Startmenü launcher

Ein Projekt ist das Hauptstrukturelement in SNiFF+, um Dateien und Verzeichnisse zusammen zu gruppieren. Wenn man sniff startet, wird das folgende kleine Startmenüfenster dargestellt. Von hier erstellt man neue Projekte und hat einen Überblick über die schon existierenden. Hier beginnt man normalerweise mit seiner Arbeit durch Starten des Projekteditors oder des Symbolbrowsers.



Der Projekteditor launcher

Im Projekteditor siehst du alle Quelldateien, die zu einem Projekt gehören. Du kannst in dieser Liste filtern, Unterverzeichnisse ein- oder ausschließen etc.. Es zeigt auch version control/locking Informationen an und man kann Dateien ein/aus-checken. Ein sehr nettes Feature ist, daß man in der Liste der Dateinamen durch einfaches Eintippen des Dateinamens suchen kann. Die Suchfunktion ist inkremental, es wird während des Tippens gesucht, ähnlich zu Emacs isearch.



Der Symbolbrowser launcher

Der Symbolbrowser ist ähnlich zum Projekteditor, außer, daß man alle Symbole sehen kann sowie wo sie benutzt werden. Durch einen Klick auf die rechte Maustaste kann man den cross referencer (siehe unten) starten und sehen, wo auf ein Symbol Bezug genommen wird und welche Symbole darauf Bezug nehmen. Z.B., welche Funktionen diese spezielle Funktion oder Variable benutzen.



Der class browser (Klassenbrowser)

Der Class Browser (Klassenbrowser) zeigt die lokal definierten und ererbten Member einer Klasse. Er sorgt für eine Reihe von Filtermöglichkeiten, die auf Vererbung, Sichtbarkeit und Typ der Memberfunktionen basieren.



Der Hierarchiebrowser hierarchy

Der Hierarchiebrowser zeigt die Vererbungsverhältnisse von Klassen.



Der cross referencer crossref

Hier sieht man, in welchen Plätzen ein gegebenes Symbol (Funktion, Variable etc.) benutzt wird und auch zu welchen Symbolen eine gegebene Funktion oder Klasse sich bezieht.



Der include browser include

Hier sieht man, welche Dateien in einer gegebenen .c Datei mitenthalten sind oder wo eine .h Datei benutzt wird.



Der Sourceeditor edit

Sniff kommt mit einem netten Sourceeditor. Es besitzt Syntaxhighlighting und man kann schnell zwischen Funktionen/Klassen hin- und herspringen. Man kann auch andere Programme, wie z.B. den cross referencer direkt innerhalb des Source Editors aufrufen.
Der Editor ist sehr fortschrittlich, hat jedoch nicht die Mächtigkeit von Vim oder Emacs. Auf der anderen Seite erfordern Vim oder Emacs, daß man sie wirklich gut kennt. Der sniff source editor ist deshalb eine sehr gute Wahl, wenn man nicht 100% mit vim oder emacs vertraut ist.

Diejenigen, die nichts anderes als vim oder emacs benutzen wollen, können diese Editoren auch mit SNiFF+ benutzen. Wenn du vim benutzen möchtest, solltest du die Version installieren, die mit SNiFF+ mitgeliefert wird. Dieser spezielle vim hat einige Kommunikationsprotokolle einkompiliert, die es SNiFF+ ermöglichen, mit vim zu sprechen. Um emacs zu benutzen, mußt du nichts spezielles installieren. Der normale emacs, der mit den meisten Linuxdistributionen mitkommt, sollte laufen.



Die Sniffshell shell

Das Shellfenster wird hauptsächlich während eines Kompilierungslaufes benutzt. Man kann die Fehlermeldungen des Kompilierers in diesem Fenster sehen. Um zu einem Fehler im Sourcecode zu springen, hebt man die Zeile der Fehlermeldung in der Shell hervor und wählt dann Edit->Show Error. Dies führt einen im Sourceeditor zu der Zeile, wo der Fehler passiert ist. Dieses Shellfenster ist ansonsten sehr einfach. Siehe auch weiter unten die Beschreibung der Probleme, die ich mit diesem Shellfenster hatte.



Andere Werkzeuge

SNiFF+ enthält auch einige andere Programme, die ich bisher noch nicht benutzt habe. Dies sind der Dokumentationseditor, DiffMerge und der Konfiguration Manager. DiffMerge scheint ein Mergetool zu sein, daß Veränderungen von einem Zweig merged und der Konfigurationsmanager scheint ein Programm zu sein, um Zweige zu erzeugen und zu verwalten.

 

Die Umkehrseite

SNiFF+ wurde nach Linux portiert und dies ist in vielen Fällen sichbar. Glücklicherweise unterstützt es gewohnte short cuts wie Crtl-a (gehe zum Beginn der Zeile), Crtl-e (gehe zum Ende der Zeile), Crtl-k (lösche bis zum Ende der Zeile) etc... Es unterstützt jedoch nicht das Kopieren und Pasten mit der Maus. Unter Unix hat man normalerweise eine 3Tastenmaus und man wählt den Text mit der linken Maustaste, während man ihn mit der mittleren Maustaste pastet. Unter Linux läuft das in allen Programmen und es ist wirklich ärgerlich, daß dies mit SNiFF+ nicht geht. Stattdessen wird copy und paste mit einer Tastenkombination erreicht, die von MS-Windows zu kommen scheint.
SNiFF+ ist ansonsten ein ordentliches Produkt, aber nicht in der Lage zu sein, mit der Maus kopieren und pasten zu können, hat mich jedes Mal geärgert, wenn ich es benutzt habe. Wenn ich eine Verbesserung mit der höchsten Priorität für SNiFF+ vorschlagen müßte, dann wäre es dieser Punkt.

Ich benutze Farben in der shell prompt und ich habe ls zu ls --color=tty gealiased. Normale Linux xterm, gnome-term, kvt, etc unterstützen alle diese Farben:
shell
Die Shell, die zu sniff gehört, unterstützt es nicht und die Ausgabe sah deshalb ein bißchen komisch aus:
shell
Glücklicherweise ist dies nicht so schwer zu reparieren, obwohl es schön gewesen wäre, wenn sniff ANSI Farbcodes unterstützt hätte. Um es zu reparieren, ist es die einfachste Lösung, $TERM zu testen und wenn das gleich etterm (der sniff Terminalname) ist, dann unaliase ls und benutze keine Farbe in dem prompt.
Langzeit Emacsbenutzer wissen wahrscheinlich, daß die Shell in Emacs dasselbe Problem hat und haben schon in ihrer .bashrc oder .tcshrc. daranherumgearbeitet. Hier ist z.B. Code für tcsh Bentuzer, um in ihre .tcshrc zu gehen:

if ($?TERM) then
     # switch off color prompt for emacs and sniff
     if ("$TERM" == "dumb" || "$TERM" == "etterm") then
         # a color free prompt:
         set prompt='\n%n@%m[%d,%T]\n(%~) %# '
         alias cwdcmd '/bin/ls -F'
         alias ls '/bin/ls -F'
     endif
endif
Benutzer der bash müssen schreiben:
# switch off color prompt for emacs and sniff
if [ "$TERM" = "etterm" -o "$TERM" = "dumb" ]; then
        PS1="[\u@\h \W]\\$ "
        alias ls="/bin/ls -F"
fi

Ein weiteres Problem der sniff shell ist der Name des Terminals. etterm wurde zumindest in meinem /etc/termcap nicht erkannt. Dies produziert dann die Meldung 'etterm': unknown terminal type.

Schlußfoglerung

SNiFF+ 3.2 ist ein gutes Produkt. Es liefert die Visualisierung und den Komfort, den man von einem IDE erwartet. SNiFF+ lief auch sehr stabil unter meinem Redhat 6.0. Ich hatte es für ca. 3 Wochen benutzt, bevor ich diesen Artikel schrieb. SNiFF+ ist nicht einmal abgestürzt. Die Werkzeuge wurden für den täglichen Gebrauch entwickelt. Mit der Ausnahme des wirklich ärgerlichen copy/past-Problems waren alle Teile von SNiFF+ sehr gut brauchbar. Persönlich kann ich nicht verstehen, daß diese Software für so viele Unixsysteme verfügbar ist und nicht die einfache copy/paste Funktion mit der Maus richtig hinbekommt.