XCoden työkalut: koodin staattinen analyysi

XCode on tarjonnut versiosta 3.2 lähtien hyödyllisen Analyze-toiminnon, joka analysoi koodia ja näyttää käyttäjällesen löytämät ongelmakohdat koodissa. Kun tyypillinen kääntäjä varoittaa käyttäjiä antamalla virheitä esimerkiksi käyttämättömille muuttujille, analyysitoiminto menee paljon pitemmälle, ja voi varoittaa sellaisestakin muuttujasta johon on asetettu ehkä jopa useita kertoja arvoa, mutta jota ei käytetä missään. Toimintoon pääsee käsiksi valikon “Product -> Analyze” kautta (XCode 4.x).

XCoden staattisen analyysin työkalu perustuu Clang-nimiseen työkaluun (http://clang.llvm.org/), ja jonka analysaattori on sittemmin liitetty XCodeen vakio-ominaisuutena (alkaen versiosta 3.2). Tässä tärkeimpiä ja yleisimpiä ongelmia joita tämä työkalu löytää:

1) Muistivuotodot

Analysaattori näyttää potentiaaliset muistivuodot applikaatiossa alla olevassa kuvassa esitetyllä tavalla. Tässä tilanteessa facebook-olio vuotaa, koska sitä ei releasata muualla ohjelmassa.

2) Alustamattomat muuttujat

Potentiaalisesti alustamattomien muuttujien käyttö voi johtaa isompiinkin bugeihin. Kuvan tilanteessa ‘val’-muuttujaa ei alusteta, kun test saa arvokseen 9. Vaikka koodi olisikin suunniteltu niin, että ‘test’ ei voi saada arvoa 9, niin tällainen koodi on silti virhealtista kun koodia ruvetaan muuttamaan tulevaisuudessa.

3) Metodin palauttama alustamaton arvo

Kuvassa metodi palauttaa ‘ar’-muuttujan, joka on taulu. Taulua ei kuitenkaan alusteta, sillä jos muuttujan ‘test’ arvo on 10, ‘ar’ ei ole koskaan alustettu.

Näiden kolmen lisäksi analyze antaa muitakin hyödyllisiä varoituksia. Jo pelkästään korjaamalla analyzen palauttamat varoitukset säästyy monelta potentiaaliselta bugilta ja muistivuodolta, joten toimintoa kannattaa käyttää aika ajoin. Analyzen saa myös automaattisesti käyntiin buildin yhteydessä – klikkaa projektin juurikansiota ja Build Optionsin alla vaihda kohta ‘Run Static Analyzer’ kohtaan yes.

Lisätietoa löytyy Applen kirjoittamasta artikkelista.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>