Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Core dump Ohjelman kaatuessa tietynlaisiin virheisiin (erityisesti muistivirheeseen, segmentation fault), sen senhetkinen tila (muistin kuva) voidaan tallettaa.

Samankaltaiset esitykset


Esitys aiheesta: "Core dump Ohjelman kaatuessa tietynlaisiin virheisiin (erityisesti muistivirheeseen, segmentation fault), sen senhetkinen tila (muistin kuva) voidaan tallettaa."— Esityksen transkriptio:

1 core dump Ohjelman kaatuessa tietynlaisiin virheisiin (erityisesti muistivirheeseen, segmentation fault), sen senhetkinen tila (muistin kuva) voidaan tallettaa levylle ns. core dumppina. Nykyisin tämä on yleensä oletuksena estetty, mutta ohjelmankehitysvaiheessa se kannattaa sallia, Bourne- tyyppisissä shelleissä (bash, ksh jne) komennolla ulimit -c unlimited csh:n tyyppisissä vastaavasti limit coredumpsize unlimited Dumpin koolle voi myös antaa

2 core & gdb Debuggerit kuten gdb osaavat lukea core dumppeja, ja niillä voi helposti katsoa mihin kohtaan ohjelma kaatui ja mitkä olivat muuttujien arvot sillä hetkellä. $ gdb a.out core.12345 (gdb) p a Muuttujanimien yms käyttö edellyttää, että ohjelma on käännetty -g optiolla.

3 Yleisiä bugeja ● Määrittelemättömän muuttujan käyttö. Yleensä kääntäjä valittaa tästä, mutta jos ao. muuttujanimi sattuu olemaan ulompana (kirjastossa tms) määritelty, koodi saattaa kääntyä mutta toimia (joskus hyvinkin oudolla tavalla) väärin ● Alustamattoman muuttujan käyttö. Tästä kääntäjä ei yleensä osaa valittaa, koodi saattaa joskus toimia, joskus ei. Vaikka jotkin muuttujat (static ym) alustetaankin automaattisesti, siihen ei kannata luottaa.

4 ● Vertailun (==) ja sijoituksen (=) sekoittaminen. Joskus kääntäjä osaa varoittaa tästä, joskus ei. ● Puolipiste väärässä paikassa, erityisesti ehdon perässä (“if (x); {... }” yms). ● Kokonaislukujakolasku: /-symbolia käytetään sekä kokonaisluku- että liukulukujakolaskuun joskus hieman hämäävillä säännöillä (esim. “float x = 1/2;”)

5 ● Taulukon ylivuoto. Ehkä kaikkein yleisin tietoturva- aukkojen syy. Tyypillisiä tilanteita: taulukon määritteleminen yhtä liian pieneksi, virheellinen lopetusehto silmukassa, merkkijonofunktioiden käyttö kokoa tarkistamatta, scanf(“%s”...), gets(); debuggausvinkki: watchpoint taulukon viimeiseen alkioon tai sen jälkeen lisättyyn ylimääräiseen muuttujaan.

6 ● Funktion käyttö ilman prototyyppiä: tästä seuraa helposti virheellinen tyyppimuunnos ja oudosti satunnaisen näköisesti väärin toimiva koodi. Erityisesti funktion määrittelyn ollessa samassa tiedostossa myöhemmin prototyyppi helposti unohtuu (kääntäjä tosin usein varoittaa). Erikoistapauksena #include'n puuttuminen. ● Virheelliset/puuttuvat tyyppimuunnokset. Kääntäjä yleensä valittaa, ei kuitenkaan aina (muuttuvien parametrilistojen kanssa, vanhan ei-prototyyppikoodin kanssa).

7 ● scanf, printf ja &: milloin tarvitaan, milloin ei ● scanf ja väärä formaatti: kääntäjä ei huomaa ● scanf(“%s”...) ja tyhjiä sisältävät merkkijonot ● merkkivakiot ('a') vs. merkkijonovakiot (“a”) ● merkkijonojen vertailu ==:lla ja kopiointi =:lla ● merkkijono ilman loppu-\0:aa ● merkkijono johon loppu-\0 ei mahdu

8 ● fgetc, getc, getchar: palautusarvo on int, ei char (“char c; while ((c=getchar()) != EOF) {...” ● feof(): kertoo _edeltävän_ operaation jälkeisen tilan (“while (!feof(f)) {...” EI yleensä toimi oikein) ● syöttöpuskurin tyhjentämättä jättäminen (scanf jne jättävät ylimääräiset sinne seuraavan lukuoperaation löydettäväksi ● switch ja break'in puuttuminen

9 ● && ja || vs. & ja | ● && ja || ja logiikkavirheet (“while (!(a==10) || !(a==20)) {...” ● “a < b < c”, “a == b == c” yms ● prioriteettivirheet (liian vähän sulkuja) ● liian vähän sulkuja makromäärityksissä ● sivuvaikutukset makroissa ● kirjastofunktioiden nimien uudelleenkäyttö ● kirjastofunktioiden virhekoodien tarkistamatta jättäminen

10 libusb Libusb on käyttäjätason rajapinta USB-laitteiden käyttöön Linuxissa (ja *BSD:ssä ja OsX:ssä). (Varoitus: libusb on muuttumassa, tulollaan oleva versio 1.0 on monin paikoin erilainen kuin nyt käytössä oleva ja tässä kuvattu 0.1 -versio.)

11 Tyyppejä: struct usb_bus linkitetty lista (next, prev) linkki laitelistan alkuun struct usb_dev linkitetty lista devnum, descriptor, config struct usb_device_descriptor bDeviceClass, idVendor, idProduct,...

12 ● usb_find_busses ● usb_find_devices ● usb_get_busses ● halutun laitteen haku linkkilistasta ● usb_claim_interface, usb_release_interface ● usb_open, usb_close ● usb_set_configuration ● usb_control_msg, usb_get_string...


Lataa ppt "Core dump Ohjelman kaatuessa tietynlaisiin virheisiin (erityisesti muistivirheeseen, segmentation fault), sen senhetkinen tila (muistin kuva) voidaan tallettaa."

Samankaltaiset esitykset


Iklan oleh Google