Systemprogrammierung 1

Meine Übungen:

  • Meine Tafelübung: T04, Dienstags 14:15 bis 15:45 im Aquarium
  • Meine Rechnerübung: R10, Dienstags 16:15 bis 17:45 im CIP1

Abgabecheckliste

Tipps

Die Programme für den Übungsbetrieb liegen im CIP unter /proj/i4sp1/bin/. Dort findet ihr unter anderem das get-deadline Skript, das euch das nächste Abgabedatum sagt.

Als Editor empfehle ich für den Anfang micro, ihr seid in SP aber nicht an einen Editor/eine IDE gebunden. Nehmt das womit ihr am besten klar kommt. Eine Liste mit den voreingestellten Tastenbelegungen von micro findet ihr hier.

Fehler frühzeitig finden

Es kann sehr schwer sein Fehler in C frühzeitig zu erkennen. Über die Jahre wurden jedoch einige Werkzeuge entwickelt, die euch das Leben etwas leichter machen.

  • Valgrind analysiert zur Laufzeit die Anwendung auf fehlerhafte Speicherzugriffe und Memory-Leaks. Beim kompilieren/linken ist nichts weiter zu beachten. Es kann jedoch hilfreich sein mit Debuginformationen (-g) zu übersetzen.

    # Empfohlene Flags:
    valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes
    
  • Der Undefined Behavior Sanitizer kann zur Laufzeit Undefined Behavior im Programm erkennen. Undefiniertes Verhalten ist eine häufige Fehlerquelle da, wie der Name nahelegt, nicht definiert ist was der Compiler mit dem Code anstellt. Code der beim ersten Mal (scheinbar) funktioniert hat kann dadurch zu einem beliebigen Zeitpunkt an einer beliebigen Stelle Bugs hervorrufen. Beispiele sind Array-Zugriffe mit ungültigem Index, Nullpointer-Dereferencierung und Überläufe von Ganzzahlen mit Vorzeichen.

    Der UBSan wird beim kompilieren durch den Compiler eingefügt:

    # beim kompilieren:
    cc -fsanitize=undefined -c test.c -o test.o
    # beim linken:
    cc -fsanitize=undefined test.o -o test
    

    In einem Makefile kann die Flag auch unter CFLAGS übergeben werden.

In jedem Fall gilt zu beachten: Das Referenzsystem ist der CIP mit seinem Compiler und Tools. Eure Abgabe muss dort übersetzbar und ausführbar sein.

Weitere hilfreiche Tools

  • micro: Guter Editor für das Terminal. Er ist gut für Einsteiger geeignet und erfordert kaum Vorkenntnisse. Eine Liste mit den voreingestellten Tastenbelegungen findet ihr hier.
  • GDB: Der GNU Debugger ist hilfreich um sich die Ausführung des Codes im Detail anzuschauen.
  • fman ist ein kleines Skript um Manpages mittels fzf durchsuchen zu können. Das Skript kann zum Beispiel als ~/.local/bin/fman abgelegt werden. Gegebenenfalls müsst ihr den Pfad noch zu eurer .bashrc hinzufügen:
    # ~/.bashrc
    PATH="$PATH:$HOME/.local/bin/"
    
    Dann könnt ihr das Skript einfach als Befehl in der Konsole verwenden:
    fman
    

Übungen