Laborationer
Laborationerna är obligatoriska. De äger rum i grupper i läsveckorna 2 - 7 i läsperiod HT2. Man ska samarbeta två och två.
Anmälan och gruppindelning görs i SAM.
En kort introduktion till kommandorads-miljön i datorsalarna finns på sidan Om kommandoraden. (Notera att Windows Subsystem for Linux (WSL) introducerades i Windows 10, för äldre Windows-system är Cygwin ett alternativ.)
Uppgifter
Ett laborationshäfte bestående av ett försättsblad, en blankett där övningsledaren ska notera att du är godkänd, och laborationernsuppgifterna finns här (labs.pdf) och kommer att delas ut under den andra föreläsningen.
Schema för laborationsuppgifterna:
Laboration 1, Introduktion till verktygen, grundläggande C++: Läsvecka 2
Laboration 2, Introduktion till standardbiblioteket: Läsvecka 3--4
Laboration 3, Debugging: Läsvecka 5
Laboration 4, Strängar och strömmar; mallar: Läsvecka 6--7
Notera att det är två labtillfällen för lab 2 och 4.
Filer till laborationerna
Här kommer kod och material till laborationerna att finnas för nedladdning.
Lab 1
Filerna till labben finns i lab1.tar.gz
För att kunna göra cmake-uppgiften behöver du installera cmake, med apt-get install cmake
(för ubuntu/WSL eller motsvarande för annat system).
Lab2
Koden från labhandledningen finns i lab2.tar.gz
/usr/share/dict/words finns inte i datorsalarna, ni kan använda denna filen: dict-words.txt
Lab3
Koden för labben finns i lab3.tar.gz
29/11: Mindre fel och förtydligande:
I UserTable.h fanns det tidigare dels en medlemsfunktion int UserTable::testFindNbr
och dels en fri funktion (som är friend), testFindNbr
.
Det är den fria funktionen som ska användas (och det är bara denna som faktiskt har en definition), så deklarationen av medlemsfunktionen kan tas bort från klassen UserTable
.
När det i labbhandledningen står "testFindNumber()
", så ska det läsas som "funktionen testFindNumber", och ()
betyder här bara "funktion", inte nödvändigtvis "funktion utan parametrar". Det är alltså den fria funktionen testFindNumber
, som tar en UserTable
som argument, som åsyftas.
Notera att det inte är fel att deklarera en funktion som inte har en definition, så länge man inte försöker att anropa den.
Sanitizers
För att hitta fel relaterade till minneshantering och undefined behaviour har både gcc och clang "sanitizers" som slås på genom att kompilera och länka (observera att man måste både kompilera och länka med samma sanitizer) med-fsanitize=<SANITIZER>
(där <SANITIZER> kan vara bland annat address
, leak
, eller undefined
.) Se https://github.com/google/sanitizers för mer info.
Exempel
Ett litet exempel finns i sanitizers.tar.gz. I filen README.txt
finns kortfattade instruktioner.
En liten detalj är att optimeraren ibland kan göra så att programmet faktiskt fungerar som avsett, trots att det har undefined behaviour. Därför kan det vara en god idé att stänga av optimering (med -O0
) för att sanitzern ska hitta felet. För att få mer lättlästa meddelanden bör man kompilera med debug-symboler ( -g
).
cmake
Ett exempel på hur man kan bygga med sanitizers i en debug-build men inte i release finns i denna CMakeLists.txt (se kommentarerna i filen).
Lab4
Koden för labben finns i lab4.tar.gz