Navigationskarta Insitutitionen för Datavetenskap Umeå Universitet

Informationen på denna sida är preliminär. Lita inte på det som står här.



Introduktionsövningar - Moment 3

Verktyg och programsystem för utveckling i C och C++

Under detta moment får du öva på att använda en del av de programutvecklingsverktyg du kommer att använda under kursen.

Uppgifter

  1. Kopiera ett programexempel till din hemkatalog:
    cp -r ~wmaster/tdb/kurser/TDBB40/ht98/intro/bugg ~/bugg
    cd !$
    

    Ovanstånde kommandon kopierar hela katalogen ~wmaster/tdb/kurser/TDBB40/ht98/intro/bugg med innehåll till underkatalogen bugg i din hemkatalog.

    Programmet tar två strängar (s1 och s2, hårdkodade i källkoden) och talar om hur många av tecknen i s1 som inte finns med i s2. Exempel:
    "aaah" består till 25% av tecken som inte finns med i "C är snabbare än ML"
    "aaHH" består till 50% av tecken som inte finns med i "ML är snabbare än VIC-20 BASIC"

  2. Börja med att kompilera och köra programmet bugg på vanligt sätt:

    make; ./bugg

    Ser inte bra ut, eller hur? Generellt sett kan man säga att om det står "core dumped" när du försöker köra ditt program så har du problem. Stora problem.

    Apropå "stor" kan core-filen bli rätt omfattande på vissa system. Kom ihåg att ta bort den.

  3. Starta debuggern ddd:

    ddd &

  4. Öppna programmet bugg i debuggern genom att först välja Open program under menyn File. Markera sedan bugg under Files i den dialog du fått upp och klicka därefter på Open.

    Källkoden till bugg visas nu i det mittersta av debuggerns fönster. Studera koden en stund och kompilera den sedan genom att välja Make under menyn File.

  5. Kör programmet genom att klicka på knappen Run och lägg samtidigt märke till att något händer i det nedersta av debuggerns fönster.

    Som du ser gick något snett vid exekveringen. För att ta reda på vad som blev fel kan du köra programmet rad för rad.

    1. Börja med att sätta en brytpunkt på den första aktiva kodraden. Du sätter brytpunkter genom att högerklicka i marginalen till vänster om källkoden och välja Set breakpoint.
    2. Starta programmet genom att klicka på Run.
    3. Du kan nu köra programmet rad för rad med hjälp av knapparna Step Into och Step Over. Skillnaden mellan dem är att Step Over exekverar eventuella funktionsanrop direkt, du kör alltså inte underfunktionerna rad för rad. Step Into förflyttar dig till källkoden för de funktioner som anropas, och du kommer automatiskt tillbaka till huvudprogrammet när funktionerna avslutas. Tips: använd inte Step Into med printf() och andra biblioteksfunktioner.
      Om du högerklickar på ett variabelnamn, till exempel totChar och sedan väljer Display kan du inspektera variabeln. Experimentera lite!
    4. Hittar du något fel? Fråga annars din handledare, så ger han eller hon dig en ledtråd.
    5. Starta om programmet med Run och stega dig fram till felet.
    6. Du kan rätta felet genom att välja Edit source från menyn Source. Du får då upp ett Vi-fönster där du kan editera koden. Den som trivs bättre med att editera i Emacs kan göra det istället.
    7. Aktivera rättningen genom att välja Reload Source i menyn Source och därefter kompilera om koden genom att välja Make under menyn File.

  6. Försök köra programmet igen (Run). Fungerar det nu? Du kan avgöra om det fungerar genom att studera vad som händer i det nedersta av debuggerns fönster. Om programmet fungerar kommer du att få ett meddelande som talar om hur många procent av tecknen i s1 som är unika. (Rätt svar är 38 procent.)
    Dessutom kommer debuggern att skriva ut texten Program exited normally.

  7. Gick det bra? Gratulerar!

  8. Gå nu tillbaka till biblioteket ~/unixintro som du skapade i Moment 1:

    cd ~/unixintro

    En av de filer du kopierade dit heter warnings.c och innehåller en del fel. Pröva att kompilera programmet med hjälp av kompilatorn gcc på följande två olika sätt:

    gcc -g warnings.c -o warnings

    gcc -g -Wall warnings.c -o warnings

    Blev det någon skillnad? Läs man-sidan för gcc och ta reda på vad flaggan -Wall betyder.

[an error occurred while processing this directive]