Übung 9

  1. Entwickent Sie einen regulären Ausdruck, der auf gültige IPv4-Adressen paßt.
  2. Entwickent Sie einen regulären Ausdruck, der auf eingebaute C-Datentypen paßt.
    Hinweis: Es geht um die Typen, die aus Schlüsselworten gebildet werden können; Typen wie size_t brauchen nicht erkannt zu werden.
  3. "Bonusaufgabe" (Vorsicht, schwer!): Entwickent Sie einen regulären Ausdruck, der C-Kommentare erkennt.
  4. Zeichnen Sie DEAs für die regulären Ausdrücke für die Ganz- und Fließkommazahlen in C aus Übung 7.
  5. Mit dem Befehl while true ; do < /proc/net/udp grep ':04F[01] ' ; sleep 1 ; done | uniq | ts sollte sekündlich der Füllstand des System-UDP-Puffers für die Ports 1264 und 1265 mit Zeitstempel versehen ausgegeben werden, wenn sich etwas daran ändert. Was ist dabei das Problem, und wie läßt es sich lösen?
    Tip: Übertragen Sie Daten mit netcat auf localhost und verfolgen Sie die Ausgabe des Kommandos. Falls das Programm ts nicht installiert ist, können Sie sich z.B. mit gawk '{print system("date | tr -d '"'"'\n'"'"'") " " $0}' behelfen.
  6. Erklären Sie das gawk- bzw. Shellkommando aus der vorigen Aufgabe.
  7. Machen Sie sich mit der Debuggerbenutzung vertraut: Starten Sie den gdb mit einem Programm (es darf einfach sein, sollte aber mehrere Zeilen und mindestens eine eigene Funktion und ihren Aufruf enthalten). Führen Sie das Programm anschließend schrittweise aus, wobei Sie mal in Funktionen hineinspringen und mal nicht. Lassen Sie sich Werte von Variablen und anderen Ausdrücken (Berechnungen, Arrays mit Index, ...) und einen Stacktrace ausgeben.
  8. Verwenden Sie den ddd zum "grafischen Debuggen", lassen Sie sich Werte anzeigen (display), setzen Sie Breakpoints und experimentieren Sie ein wenig.
    Tip: Verwenden Sie Ihren SPL-Compiler oder Ihre Ninja-VM für diese Aufgabe. Damit haben Sie ein einigermaßen komplexes Programm, das Sie bereits kennen.
  9. Übersetzen Sie dieses Programm und debuggen Sie es. Erstellen Sie eine korrigierte Version. – Nicht alles, was in diesem Programm funktioniert, ist auch empfehlenswert; verbessern Sie ruhig auch Dinge, die zwar semantisch richtig, aber fragwürdig sind.
    Hinweis: Man kann die Fehler beim "Durchlesen" finden; es geht jedoch darum, sich mit Debugging vertraut zu machen.
  10. Öffnen Sie mit einem Debugger ein Programm, dessen Quelltext nicht vorliegt (weil er z.B. umbenannt oder verschoben wurde), und versuchen Sie, das Programm schrittweise durchzugehen.
  11. Öffnen Sie mit einem Debugger einen Coredump und schauen Sie sich den "aktuellen" Zustand an.
    Hinweis: Sie können einen Coredump erzeugen, indem Sie innerhalb des Programms ein entsprechendes Signal provozieren oder mit kill eines von außen senden.