Tutkitaan seuraavan ohjelman toimintaa debuggerin avulla.
/* ********************************************************* TUTKI2.CPP Tutkitaan muuttujien arvoja debuggerin avulla. Ohjelman pitäisi laskea lämpötilojen keskiarvo annetuilta päiviltä. ********************************************************* */ #include <iostream.h> int main(void) { int lkm, kpl; double lampo, summa; cout << "Tämä on testiohjelma debuggeria varten.\n" << endl; lkm = 98; // sijoitetaan muuttujille arvoja lampo = 0; kpl = 0; summa = 0; cout << "Monenko päivän lämpötilojen keskiarvo lasketaan? "; cin >> lkm; // luetaan lkm-muuttujalle arvo käyttäjältä while (kpl < lkm) { kpl = kpl + 1; cout << kpl << ". päivän lämpötila > "; cin >> lampo; summa = lampo + 1; // !!!! Virhe: Summa kasvaa väärin } if (kpl > 0) cout << "Lämpötilojen keskiarvo: " << summa/kpl << endl; return 0; }
- File Edit Search Run Compile Debug Project Options Window Help +-[_]----------------------------- D:TUTKI2.CPP -------------------------1-[^]-+ ¦#include <iostream.h> _ ¦ _ ¦int main(void) _ ¦{ _ ¦ int lkm, kpl; _ ¦ double lampo, summa; _ ¦ _ ¦ cout << "Tämä on testiohjelma debuggeria varten.\n" << endl; _ ¦ lkm = 98; // sijoitetaan muuttujille arvoja _ ¦ lampo = 0; _ ¦ kpl = 0; _ ¦ summa = 0; _ ¦ _ ¦ +----------------------------------- Watch ------------------------------2-----+ ¦ lkm: 98 ¦ ¦ kpl: 2320 ¦ ¦ lampo: 0.0 ¦ ¦ summa: 1.50375018682425e-264 ¦ ¦ ¦ ¦ ¦ +------------------------------------------------------------------------------+
Alla olevassa kuvassa tutkinta on edennyt varjostetulle riville saakka. Watch-ikkunasta näkyvät ko. tilanteen muuttujien arvot. Huomaa, että muuttujan kpl arvo ei ole vielä muuttunut, sillä varjostettua riviä ei ole vielä suoritettu (varjostus merkitsee siis sitä, että ko. rivi suoritetaan seuraavaksi).
Huomasit varmaan, että ohjelmassa oli yksi virhe: summa-muuttujan kasvattamislause
summa = lampo + 1;
ei tee sitä, mitä pitäisi. Miten muuttujan summa arvo muuttuu lauseen suorituksen jälkeen? Korjaa lause toimivaksi ja kokeile debuggausta uudelleen.