You are on page 1of 27

NAPREDNO

PROGRAMIRANJE
P1 Debugiranje

Doc. dr. sc. Marijan Herceg


Doc. dr. sc. Josip Job
2014./2015.

Raunalni sustav

Raunalni sustav

Raunalni sustav
Hardver softver
Fizika arhitektura - programska
podrka
esto se ue odvojeno, ali u
raunarstvu su usko povezani i dok
se bavi jednim uvijek se mora misliti
na drugo.
Budui da razvoj fizike arhitekture
esto prethodi razvoju programske
podrke, razvoj programske podrke
vie ovisi o fizikoj arhitekturi nego
obrnuto.

Raunalni sustav
Kad raste veliina raunala, raste i
cijena
Kad raste veliina raunala, raste i
potronja
Raunalni sustav treba raditi
dovoljno dobro, biti to jeftiniji i
imati to manju potronju.
to treba raditi dovoljno dobro?

Raunalni sustav
Sustavi za rad u stvarnom vremenu
Ugraeni sustavi
Namjenski raunalni sustavi
Procesori s ogranienim resursima
Memorija, registri
Brzina
Energija

Namjenske procesorske arhitekture


Svaki procesor zbraja brojeve... ?

Kada se programiraju namjenski


raunalni sustavi
Prije nego je fizika arhitektura gotova
Da bi se ubrzao razvoj sustava
Dio koda je ve ranije razvijen

Kada je fizika arhitektura fiksirana, ali jo uvijek nije


proizvedena
Razvojne ploe sa prototipom
Simulatori

Kada je fizika arhitektura gotova, ali sistemska


programska podrka jo nije (alati)
Razvoj sistemske programske podrke obino kree prije
nego to je fizika arhitektura gotova

Kada je fizika arhitektura spremna i zrela


Kod nekih sustava ovo je ve kraj ivotnog ciklusa pp-a
Kod nekih drugih - novi poetak

Kako se programiraju namjenski


raunalni sustavi
Ovisi od mnogo imbenika:

Faze u razvoju - spremnost fizike arhitekture i alata


Uloenog razvojnog napora - u razvoj sistemske pp, alata prije svega
Obujma konkretne pp - za malu pp moe se i binarno programirati
Zahtjevnosti konkretne pp - na nioj razini apstrakcije moe se vie
iscijediti iz arhitekture

Asembler
Blii arhitekturi
Prevoditelj (asembler) laki za izradu
Kompliciraniji za uspjeno programiranje

Vii programski jezik


Dalji od arhitekture
Prevoditelj (compiler) kompliciraniji
Programiranje lake

ime se programiraju namjenski


raunalni sustavi
Rad sa NRS najee nije direktan.

Programer

Sustav domain
(engl. host
system)

Ciljni sustav
(engl. target
system)

Obino raunalo
ope namjene

Na namjenski
raunalni sustav

Dio sustavske pp izvrava se na domainu.


Domain je sustav s vie resusra i veom
brzinom, a prije svega ugodniji za rad.
Mnogi elementi sustavske pp ni ne bi mogli
biti izvravani na ciljnom sustavu.

ime se programiraju namjenski


raunalni sustavi
Alati:
Asembler
Kompajler (za vii programski jezik)
Debuger (komponenta za kontrolirano
izvravanje programa)
Simulator (omoguuje bolju kontrolu i bolji
uvid u izvravanje koda)
Integrirano razvojno okruenje
Operacijski sustav i biblioteke

Programski jezik C
Vii programski jezik koji se najee
koristi za programiranje NRS je C.

Position
Jun 2013
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

Position
Jun 2012
1
2
4
3
7
5
6
8
9
11
10
12
17
14
16
21
19
13
18
22

Programming
Language
C
Java
Objective-C
C++
PHP
C#
(Visual) Basic
Python
Perl
JavaScript
Ruby
Visual Basic .NET
Transact-SQL
Lisp
Pascal
Bash
PL/SQL
Delphi/Object Pascal
Ada
MATLAB

Ratings
Jun 2013
17.809%
16.656%
10.356%
8.819%
5.987%
5.783%
4.348%
4.183%
2.273%
1.654%
1.479%
1.067%
0.913%
0.879%
0.779%
0.711%
0.657%
0.602%
0.575%
0.563%

Delta
Jun 2012
+0.08%
+0.39%
+1.26%
-0.54%
+0.70%
-1.24%
-1.70%
+0.33%
+0.05%
+0.18%
-0.20%
-0.15%
+0.21%
-0.11%
-0.07%
+0.09%
+0.02%
-0.55%
-0.11%
0.00%

Change

Programming
Language

Ratings

Change

Oct 2015

Oct 2014

Java

19.543%

+6.04%

16.190%

-1.47%

C++

5.749%

+0.88%

C#

4.825%

+0.08%

Python

4.512%

+2.18%

PHP

2.561%

-0.38%

13

Visual Basic .NET

2.462%

+0.71%

12

JavaScript

2.292%

+0.52%

Perl

2.247%

+0.13%

10

16

Ruby

1.825%

+0.70%

11

11

Delphi/Object Pascal

1.637%

-0.18%

12

31

Assembly language

1.573%

+1.16%

13

14

Visual Basic

1.515%

-0.05%

Programski jezik C
Zato programski jezik C?
Nije previe visok
Omoguuje bolje cijeenje performansi
Relativno dobro preslikavanje njegovih
operacija na operacije fizike arhitekture

Povijesni razlozi
Nagomilan ve postojei kod
Veliki broj njegovih poznavatelja
Konstrukcija prevoditelja relativno
jednostavnija

Programski jezik C
Zato NE programski jezik Ce?
Nije previe visok
Vii nivo apstrakcije bi olakavao programiranje
Relativno loe preslikavanje njegovih operacija na
operacije fizike arhitekture

Povijesni razlozi
Valjda je do sada moglo biti smiljeno neto pametnije
Veliki broj njegovih poznavatelja
Koji standard tono podrava konkretan sustav?
K&R

C99

C89

C11

K&R

C99

C89

C11

Cilj predavanja i vjebi


Osposobiti studente da mogu:
Pisati novi C kod za NRS
Nauiti dijelove jezika koji nisu u fokusu kada se
programiraju sustavi ope namjene i kada se ad hoc
programira, ali su vani pri programiranju NRS
Uvrstiti dobru praksu, radi pisanja lijepog, jasnog i
upotrebljivog koda
Prepoznati sive zone jezika da ih ne biste koristili

Razumjeti postojei C kod za NRS


Prepoznati sive zone jezika da biste ih razumjeli u
kodu sa kojim se budete susretali

Debugiranje

Debugiranje?
Buba (eng. Bug /bag/) - Problem u
programu
Otklanjanje buba, problema, odnosno
bugova
U uem smislu to podrazumijeva:
kontrolirano izvravanje programa i
uvid u stanje programa radi
otklanjanja problema.
U irem smislu to su svi mogui (i
nemogui) postupci za otkrivanje i

Testiranje (ispitivanje)
Program najee radi savreno sve dok ga ne
pokrenemo.
Provjera ispravnosti: verifikacija i validacija
Verifikacija
provjerava radi li program ono to mi mislimo da treba raditi;
odgovara na pitanje: Radimo li proizvod ispravno?

Validacija
provjerava radi li program ono to bi trebao raditi;
to to mi mislimo da program treba raditi ne mora biti ono to
treba korisniku/naruitelju;
odgovara na pitanje: Radimo li ispravan proizvod?

Testiranje ne mora biti formalizirano, ali to je vie nego


poeljno kod ozbiljnih poduhvata.

Otklanjanje problema
Program najee ne radi dobro sve dok ga ne
izdebugiramo.
Ispitni sluaj:
ulaz (pobuda) - oekivani izlaz (reakcija)
Zato dobivamo neoekivan izlaz?
Potreban nam je bolji uvid u izvravanje programa.
Uobiajeno dostupne stvari:
Kontrolirano izvravanje:
Korak po korak i toke prekida

Uvid u stanje programa


Promatranje varijabli i memorije
Dodavanje kontrolnih ispisa u kod

Otklanjanje problema
Neuobiajeno dostupne stvari:
Kontrolirano izvravanje:
Korak unazad
Uvjetne toke prekida
Kretanje po tijeku podataka, umjesto po tijeku
izvravanja

Uvid u stanje programa


Izraunavanje izraza u trenutnom kontekstu

Ali nekada nemamo nita od navedenog!


Tada se snalazimo kako znamo i umijemo.

Neke podjele bugova


Uhvatljivi (dosljedni, ponovljivi) bugovi
Za odreenu pobudu uvijek dobivamo istu neeljenu reakciju
Lako ponovljivi bugovi
Pobudu koja uzrokuje neeljenu reakciju je lako napraviti u kontroliranim
uvjetima

Teko ponovljivi bugovi


Pobudu koja uzrokuje neeljenu reakciju je teko napraviti u kontroliranim
uvjetima

Neuhvatljivi (nedosljedni, stohastiki) bugovi


Za odreenu pobudu neeljenu rekciju dobivamo samo ponekad
Uzrok je postojanje neeljenog utjecaja na sustav izvan imbenika
pobude
Mogui uzroci:
itanje iz neinicijalizirane memorije
Oslanjanje na adrese dinamiki zauzete memorije
Upadanje u stanja nedefinirana programskim jezikom

Digresija: nedefinirana stanja i


ponaanja
To znai da ponaanje moe biti razliito prilikom
izvravanja istog koda na istom sustavu.
Neki vaniji primjeri nedefiniranih ponaanja u
programskom jeziku C:
Prekoraenje kod cjelobrojne (integer) aritmetike
Ukljuujui pomjeranje u desno, tzv. shiftanje

Bitske operacije nad cijelim brojevima


Binarna reprezentacija cijelih brojeva ne mora biti dualni
komplement!

Vai samo za cijele brojeve s predznakom (signed)!


Brojevi bez predznaka (unsigned) se definiraju potpuno
drugaije.

Neke podjele bugova


Jednostavni bugovi
Manifestacija problema je usko vezana za mjesto
gdje postoji greka u kodu.

Sloeni bugovi
Manifestacija problema i mjesto greke u kodu su
vrlo posredno povezane.

Kako uspjeno debugirati

Razumjeti sustav
Reproducirati bug
Ne pretpostavljati - pogledati
Podijeli pa vladaj
Postepeno mijenjati
Voditi biljeke
Provjeriti kabel (da nije do fizike
arhitekture?)
Primijeniti novi pogled na stvari
Nita se ne popravlja samo od sebe

Najvaniji savjet!

Pokuati rijeiti
problem

You might also like