Datasäkerhet och Informationssäkerhet

Robert Malmgren AB

“Trust is good, control is better.”

2011/03/22

Xcode 4

På ROMAB har vi hållit på med en del utveckling för MacOSX och iOS. Förutom vanligt skriptande och hackande av småprogram så har vi testat Apples verktyg för programmering och utveckling. Utvecklingsmiljön (IDE'n) för detta heter Xcode. Det finns flera bra saker med Xcode, bland annat att den är gratis, att kommer med som standard i alla utlevererade Macdatorer, att den har stöd för för flera programspråk (C, C++, Objective-C) samt att den har bra integrerat stöd för att skapa de grafiska delarna av programmet.

Nu har den senaste versionen av Xcode släppts, Xcode4, denna är dock bara gratis för de som har utvecklingkonto hos Apple, annars kostar den 5dollars på App Store. Den innehåller massor med coola saker, tex ny kompilatorback-end (LLVM[1], som genererar optimalare kod och utnyttjar multi-core-CPUer bättre), numera är interfacebuilderfunktionen helt inbyggd, den stöder GIT[2] och använder det som standard - istället för bara subversion som tidigare. Om man har ett program som är utvecklat under tidigare versioner av Xcode så måste LLVM slås på manuellt.

Men ämnet för den här bloggtexten är egentligen den nya debuggern! Den har några riktigt sköna finesser. Här nedan syns en bild med källkoden till "peka" ett av våra projekt. Debuggern kan bland annat göra ganska ball programflödesanalys där minnesluckor och andra programeringsfel lättare kan upptäckas. Enkla saker som att man mistar sig på tilldelning (=) och jämförelse (==) eller att en pekare saknas.

misspointer

Även mer avancerad debug finns om man kör verktyget Analyze. Som man kan se på bilden nedan så kan den med hjälp av väldigt tydlig grafiska markörer i form av pilar visa hur vissa typer av logiska fel i koden kan uppträda.

misstring

I bilden ovan så syns det ett exempel på när Xcode tycker sig ha hittat en en sträng som ibland inte blir satt till ett värde.

missrelease

Det går även att hitta minnesluckor som kan missas. I ovanstående exempel så allokeras ljudspelaren lokalt i metoden och det är tänkt att den ska frigöras i dess delegate metod, detta fungarar inte med analysern och spelaren "play" markeras som minnelucka.

Dessutom så finns ju fortfarande kopplingen till Instruments där minneslucker etc kan visualiseras under körning.

[1] För info om LLVM-sviten av kompilatorer, se http://www.llvm.org/

[2] För de som vill veta mer om Xcode4 och git-integrationen rekommenderas github-utvecklarnas blogg: https://github.com/blog/810-xcode-4-released-with-git-integration


----
Written by Tobbe @ 2011-03-22