24.02.2013 Aufrufe

Einf ¨uhrung in UNIX - CIS

Einf ¨uhrung in UNIX - CIS

Einf ¨uhrung in UNIX - CIS

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

2.7 Writer’s Workbench 191<br />

Objektfile /usr/lib/xdbend.o kompilieren und anschließend laufen lassen,<br />

um e<strong>in</strong>en aktuellen Speicherauszug (Coredump) zu erzeugen:<br />

cc -g fehler.c /usr/lib/xdbend.o<br />

chmod 700 a.out<br />

a.out<br />

xdb<br />

Standardmäßig greift der Debugger auf das ausführbare File a.out(4)<br />

und das beim Zusammenbruch erzeugte Corefile core(4) zurück. Er promptet<br />

mit >. Wir wählen mit der E<strong>in</strong>gabe s E<strong>in</strong>zelschritt-Ausführung. Mehrmals<br />

mit RETURN weitergehen, bis Aufforderung zur E<strong>in</strong>gabe von a kommt<br />

(ke<strong>in</strong> Prompt). Irgende<strong>in</strong>en Wert für a e<strong>in</strong>geben. Fehlermeldung des Debuggers<br />

Bus error. Wir holen uns weitere Informationen vom Debugger:<br />

T (stack view<strong>in</strong>g)<br />

s (E<strong>in</strong>zelschritt)<br />

q (quit)<br />

Nachdem wir wissen, daß der Fehler nach der E<strong>in</strong>gabe von a auftritt,<br />

schauen wir uns die Zeile mit scanf( ..., a) an und bemerken, daß wir<br />

der Funktion scanf(3) e<strong>in</strong>e Variable statt e<strong>in</strong>es Po<strong>in</strong>ters übergeben haben<br />

(man scanf oder im Anhang nachlesen). Wir ersetzen also a durch &a. Das<br />

Compilieren erleichtern wir uns durch make(1). Wir schreiben e<strong>in</strong> File namens<br />

makefile mit folgenden Zeilen:<br />

fehler: fehler.c<br />

cc fehler.c -o fehler<br />

und rufen anschließend nur noch das Kommando make(1) ohne Argumente<br />

auf. Das Ergebnis ist e<strong>in</strong> lauffähiges Programm mit Namen fehler.<br />

Der Aufruf von fehler führt bei s<strong>in</strong>nvollen E<strong>in</strong>gaben zu e<strong>in</strong>er Ausgabe, die<br />

richtig se<strong>in</strong> könnte. Wir haben aber noch e<strong>in</strong>en Denkfehler dar<strong>in</strong>. Statt der<br />

Summe wird der Integer-Quotient berechnet. Wir berichtigen auch das und<br />

testen das Programm mit e<strong>in</strong>igen E<strong>in</strong>gaben. Da unser Quelltext richtig zu<br />

se<strong>in</strong> sche<strong>in</strong>t, verschönern wir se<strong>in</strong>e vorläufig endgültige Fassung mit dem Beautifier<br />

cb(1):<br />

cb fehler.c > fehler.b<br />

rm fehler.c<br />

mv fehler.b fehler.c<br />

Schließlich löschen wir das nicht mehr benötigte Corefile und untersuchen<br />

das Programm noch mit e<strong>in</strong>igen Werkzeugen:<br />

time fehler<br />

cflow fehler.c<br />

cxref fehler.c<br />

str<strong>in</strong>gs fehler

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!