Productbespreking: SNiFF+ voor 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 nl Mylène Reiners

AboutTheAuthor:[Eine kleine Biographie über den Autor]

Guido is al lang een Linux fan. Zijn Linux homepage vind je op www.oche.de/~bearix/g/.

Abstract:[Here you write a little summary]

SNiFF+ van takefive software is een Integrated Development Environment (geïntegreerde ontwikkelomgeving) beschikbaar voor Linux. Takefive biedt een gratis download versie op http://www.takefive.com/penguin. De software die hier besproken wordt komt van een voorbeeld CD, en lijkt identiek met de download versie. De beperking van beide versies is dat ze beperkt zijn tot 200 bestanden. Dit is een bespreking van SNiFF+ versie 3.2. Het is getest onder Redhat Linux 6.0.

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

[Illustration]

ArticleBody:[The article body]

Wat is SNiFF+ ?

SNiFF+ is een Integrated Development Environment voor de talen C, C++, Java, IDL, Fortran77, Fortran90 en ADA. SNiFF+ biedt de mogelijkheid om je code visueel te begrijpen. Gebruikers van andere grote besturingssystemen zijn waarschijnlijk al aan zo'n ontwikkelomgeving gewend, en zullen blij zijn dat zo'n IDE ook voor Linux beschikbaar is.

SNiFF+ en IDEs in het algemeen zijn het beste geschikt voor grote stukken code en voor omgevingen waar je veranderingen moet aanbrengen in bestaande code die je niet helemaal zelf hebt geschreven. SNiFF+ ondersteunt ook een aantal versie beheer programma's zoals RCS, CVS, clearcase, enz... Dit maakt het waarschijnlijk ideaal voor teamwerk in grotere projecten.

Installatie

SNiFF+ voor Linux wordt geleverd met een installatie script in dialoogvorm. Ik had geen problemen met het gebruik. SNiFF+ is niet beschikbaar in een packages formaat zoals rpm of deb, maar dit is geen probleem aangezien SNiFF+ niet over het hele bestandssysteem heen installeerd. Het script installeert alles in een directory (ik gebruikte /opt/sniff) en is daardoor later gemakkelijk te deïnstalleren. Hieronder zie je het begin van het installatiescript met de verschillende UNIX platforms waarvoor SNiFF+ beschikbaar is.


 
                    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 :
 
 ....hier volgen meer vragen.....

Een ding dat ik tijdens de installatie tegenkwam, was de dialoog waar "Vim 5.0 Vi Improved by Bram Moolenar" geïnstalleerd kon worden. Ik besloot dat niet te doen, omdat ik al een versie van Vim had. Dit bleek een fout te zijn, en ik moest het later toch installeren. De versie van Vim die meegeleverd wordt met SNiFF+ is namelijk een speciale. Het heeft namelijk de mogelijkheid om met de andere tools in de IDE te communiceren. Daarom zul je als je Vi wilt gebruiken deze speciale Vim moeten installeren.

SNiFF+ kan op elke plek geïnstalleerd worden. Daarom moet je 2 dingen doen nadat je de installatie voltooid hebt:

  1. laat de omgevingsvariabele SNIFF_DIR verwijzen naar de plek waar je SNiFF+ geïnstalleerd hebt (/opt/sniff in mijn geval).
  2. Breid het PATH uit met de verwijzing naar de bin-directory binnen SNIFF_DIR (/opt/sniff/bin in mijn geval).
Afhankelijk van de gebruikte shell moet je ofwel /etc/profile, ~/.bashrc voor bash of /etc/csh.cshrc, .tcshrc voor tcsh of een ander rc file dat voor jouw shell gebruikt wordt wijzigen. Als je de shell-rc bestanden niet wilt wijzigen kun je dit kleine wrapper script gebruiken, dat ik startsniff heb genoemd:
#!/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

Documentatie

tutorial in netscape

SNiFF+ wordt geleverd met goede documentatie in html. Er schijnt een mogelijkheid te zijn om ook de documentatie vanuit postscript bestanden te printen, maar ik heb nooit het idee gehad dat ik dat nodig had, omdat de html documentatie goed is. Als je SNiFF+ opstart met het commando sniff krijg je eerst een welkomst scherm. Dit welkomst scherm biedt je de mogelijkheid om onmiddelijk naar de specifieke documentatie voor jouw programmeertaal te gaan. Als je een item selecteert, wordt netscape gestart met de bijbehorende handleiding. Ik raad iedereen aan om de handleiding in elk geval te bekijken.


Belangrijke componenten van SNiFF+


De Launcher launcher

Het belangrijkste structuurelement om in SNiFF+ bestanden en directories te groeperen is het project. Als je sniff start krijg je het volgende kleine "launcher" venster. Van hieruit kun je nieuwe projecten creëren, en een overzicht krijgen van die projecten die al bestaan. Hier begin je gewoonlijk met je werk door de project editor of de symbol browser te starten.



De project editor launcher

In de project editor zie je alle bronbestanden die bij een project horen. Je kunt die lijst filteren, sub-directories opnemen of buitensluiten etc. Het toont ook versie controle/locking informatie en je kunt bestanden in- en uitchecken. Een bijzonder aardige mogelijkheid is dat je de lijst van bestandsnamen kunt doorzoeken door alleen de bestandsnaam in te tikken. De zoekfunctie is incrementeel, en zoekt terwijl je typt, net als emacs isearch.



De symbol browser launcher

De symbol browser is gelijk aan de project editor behalve dat je alle symbolen ziet en waar ze gebruikt worden. Met een klik op de rechtermuisknop kun je de cross referencer(zie beneden) starten en zien waar naar een symbool verwezen wordt en welke symbolen ernaar verwijzen. Bijv. welke functies gebruiken deze functie of deze variabele.



De class browser

De Class Browser toont de lokaal gedefinieerde en overgeërfde delen van klassen. Hij biedt een aantal filter mogelijkheden, gebaseerd op de overerving (inheritance), zichtbaarheid en type van de delen.



De hierarchy browser hierarchy

De Hierarchy Browser toont de inheritance relaties van klassen.



De cross referencer crossref

Hier zie je waar een bepaald symbool (functie, variabele enz.) wordt gebruikt, en naar welke symbolen een gegeven functie of klasse verwijst.



De include browser include

Hier zie je welke bestanden een bepaald .c bestand bevat of waar een .h bestand wordt gebruikt.



De source editor edit

Sniff wordt uitgeleverd met een aardige source editor. Het omvat syntax highlighting en je kunt snel binnen functies en klassen springen. Je kunt van hier uit ook andere programma's aanroepen zoals bijvoorbeeld de cross referencer.
Hoewel de editor geavanceerd is, heeft hij niet de kracht van vim of emacs. Aan de andere kant moet je vim of emacs echt goed kennen om ze goed te gebruiken. De sniff source editor is daarom een goede keus als je niet 100% vertrouwd bent met vim of emacs.

Degenen die niks anders dan vim of emacs willen gebruiken, kunnen deze editors ook met SNiFF+ gebruiken. Als je vim wilt gebruiken, moet je wel de versie installeren die met SNiFF+ meegeleverd wordt. Deze speciale vim heeft een communicatieprotocol waarmee SNiFF+ in staat wordt gesteld om met vim te "praten". Om emacs te gebruiken hoef je niks speciaals te installeren. De gewone emacs die bij de meeste Linux distributies wordt meegeleverd zou moeten werken.



De sniff shell shell

Het "shell" venster wordt voornamelijk gebruikt tijdens het compileren. In dat venster zie je de foutboodschappen van de compiler. Om naar een fout in de broncode te springen laat je de regel van de fout oplichten in de shell, en kiest voor Edit->Show Error. Dit brengt je in de source editor op de regel waar de fout is opgetreden. Verder is het shell venster erg eenvoudig. Zie ook hieronder voor een beschrijving van de problemen die ik hiermee heb.



Andere tools

SNiFF+ wordt met een aantal andere programma's geleverd, die ik nog niet gebruikt heb. Dit zijn de Documentation editor, DiffMerge en Configuration Manager. DiffMerge lijkt een merge tool te zijn om veranderingen van een tak (branche) samen te voegen die van een andere, en Configuration Manager lijkt een programma te zijn om takken (branches) te maken en te onderhouden.

 

De duistere kant

SNiFF+ is geschikt gemaakt voor Linux, en dat is op een aantal manieren te merken. Gelukkig ondersteunt het gewone toetscombinaties als Ctrl-a (ga naar het begin van een regel), Ctrl-e (ga naar het einde van een regel), Ctrl-k (verwijder tot op het eind van een regel) etc... Het ondersteunt echter niet kopiëren en plakken (copy and paste) via de muis. Onder Unix gebruik je gewoonlijk een muis met 3 toetsen, je selecteert tekst met de linker muisknop, en plakt het met de middelste muisknop. Onder Linux werkt dit bij alle programma's, en het is erg irritant dat het niet werkt met SNiFF+. In plaats daarvan wordt kopiëren en plakken gedaan met een toetscombinatie die van MS-Windows schijnt te stammen.
SNiFF+ is verder een goed product, maar het niet kunnen kopiëren en plakken met de muis irriteerde me gewoon elke keer als ik het gebruikte. Als ik een idee mocht aandragen dat met hoge prioriteit verbeterd moest worden in SNiFF+ dan is het dat wel!

Ik gebruik kleuren in de shell prompt en ik heb het als alias ls --color=tty gegeven. De normale Linux xterm, gnome-term, kvt, enz. ondersteunen deze kleuren:
shell
De shell die meegeleverd wordt met sniff ondersteunt het niet, en de output ziet er nogal vreemd uit:
shell
Gelukkig is dit niet moeilijk op te lossen, al zou het leuk geweest zijn als sniff ANSI kleurcodes ondersteunde. De gemakkelijkste oplossing in om te testen op $TERM en als die gelijk is aan etterm (de sniff terminal naam) de alias ls verwijderen en geen kleuren te gebruiken bij de prompt.
Emacs gebruikers weten waarschijnlijk dat de shell van emacs hetzelfde probleem heeft, en hebben allang een workaround gemaakt in hun .bashrc of .tcshrc. Hier is voorbeeldcode voor tcsh gebruikers voor in hun .tcshrc:

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
Gebruikers van bash kunnen het volgende gebruiken:
# 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

Een ander probleem van de sniff shell is de naam van de terminal: etterm was tenminste niet bekend in mijn /etc/termcap. Dit resulteert in de boodschap: 'etterm': unknown terminal type.

Conclusie

SNiFF+ 3.2 is een goed product. Het verschaft de visualisatie en het gemak dat je van een IDE zou verwachten. Het bleek ook erg stabiel onder mijn Redhat 6.0. Ik heb het zo'n 3 weken gebruikt voordat ik dit artikel schreef. SNiFF+ crashte niet een keer. De tools zijn gemaakt voor dagelijks gebruik. Met uitzondering van het echt irritante kopiëren en plakken probleem zijn alle delen van SNiFF+ goed bruikbaar. Zelf begrijp ik echt niet dat deze software voor zoveel Unix systemen beschikbaar is, en niet eens het eenvoudige kopiëren en plakken via de muis mogelijk maakt.