Symbiatch - maailma on rikki

Symbian-ohjelmointi, osa 1

25.01.2006 14.57 - mobiili ohjelmointi 

Ajattelin kirjoitella hieman asiaa Symbian-ohjelmoinnista näin suomeksi, jos siitä olisi jollekin hyötyäkin. Kaikenlaista on tullut vastaan ja voi sanoa ettei vieläkään paljoa tuosta hirvityksestä tiedä. Mutta oppia ikä kaikki.

Virheilmoitukset

"Emulaattori" on siitä surkea laitos, ettei se anna kovinkaan hyviä virheilmoituksia kehittäjälle, jos antaa mitään. Siinä mielessä toimii täysin samoin kuin oikeakin käyttis. Hieman parempaa tietoa virheistä saa joka tapauksessa luomalla emulaattorin asennushakemiston alla olevaan Epoc32\wins\c\System\Bootdata-hakemistoon tiedoston errrd. Huomaa kolme R-kirjainta ja ei tiedostopäätettä. Tämän jälkeen emulaattori kertoo paniikin syyn ja myös esimerkiksi muistivuotopaniikeissa osoitteen, joka jäi vapauttamatta. Tämä toimii myös kännyköissä (siellä hakemisto tietysti C:\System\Bootdata, vaatii uudelleenkäynnistyksen).

Debug-moodi

Aja aina kehityskoodia debug-emulaattorilla! Debug-moodissa emulaattori panikoi ohjelmaa suljettaessa jos esimerkiksi muistia on jäänyt vapauttamatta tai et ole sulkenut jotain resurssioliota (R-alkuiset luokat).

Muistivuodot

Muistivuotojen löytämiseen kannattaa käyttää HookLogger-työkalua. Asenna työkalu ja lue mukana tullut esimerkki. Vakiona mainittu hookeuser-komento ei yleensä toimi (luonnollisesti, onhan kyse Symbianista) vaan skriptiä pitää muokata. Skripti löytyy vakiona hakemistosta Program Files\Common Files\Symbian\Tools. Avaa hookeuser.pl, korjaa seuraavat rivit:

74: my $cmd = "copy \"$hooks_src\"";
77: $cmd = "\"$Bin/AttachDll\" $euser $hooks $hooked_euser";

Virhe johtuu siitä, ettei oteta huomioon vakiohakemistossa olevan välilyöntejä, joten komennot sekoavat.

Tämän jälkeen mene SDK:n juureen ja aja komento hookeuser wins. Tämän jälkeen HookLogger on käytössä.

Käynnistä ensin HookLogger ja sen jälkeen debug-emulaattori. Saatat saada virheen, jossa kerrotaan UID-filtteröinnin olevan toimimaton. Tämä ei ole vaarallista, mutta aiheuttaa sen, ettei HookLogger osaa erotella sinun ohjelmasi ja muiden ohjelmien muistinvarauksia.

Käynnistä ohjelmasi, tee mitä ohjelmalla tekisit ja sulje se. Tämän jälkeen jos saat paniikin muistiongelmasta, jätä se emulaattorin ruutuun. Avaa HookLoggerista Heap-välilehti, paina List all allocs ja odota. Listaus kestää jonkin aikaa. Tämän jälkeen järjestä lista Ptr-kohdan mukaan ja etsi emulaattorin antama osoite (listan loppupäässä). Valitse rivi jolla osoite on ja paina Alloc details. Saat kutsupinon, josta näet missä kohtaa muisti varattiin. Korjaa koodisi siten, että muisti vapautetaan.

Paniikkikoodeja

USER 45
Tämä tarkoittaa yleensä sitä, että olet vapauttanut muistia, muttet ole asettanut osoitinta NULLiksi ja yrität vapauttaa muistia uudelleen. Tämä osoite ei kuitenkaan enää ole varatun muistin alkukohta, joten saat tämän virheen.
CONE 36
Tämä koodi tarkoittaa sitä, että sinulla on joku resurssiolio (R-alkuiset luokat) avattuna etkä ole sulkenut sitä. Käytätkö esimerkiksi RFs-luokkaa, muttet sulje?

Emulaattorin näppäinkomennot

Emulaattorissa on muunmuassa seuraavat näppäinkomennot käytettävissä:

Ctrl-Shift-Alt-T
Avaa taskinhallinnan josta voi vaihtaa sovellusta
Ctrl-Shift-Alt-A
Kertoo paljonko muistia senhetkinen sovellus vie
Ctrl-Shift-Alt-K
Tappaa senhetkisen sovelluksen

Kommentoi

Kommentit

Turhautunut Symbian C++-koodari (anon, 25.01.2006 20.00)

Hip hurraa
Atrikkelisi perusteella minulla on vielä hiukan toivoa löytää muistivuoto Symbianin taikka Nokian tekemistä
kirjastoista.

Odotan innolla tulevia osia aiheeseen.


jko (anon, 14.05.2008 03.54)

Ja koska kyse on Symbiasta niin ko.polkua ei tietenkään löydy.
Epoc32\wins\c\System\Bootdata

Jutut.fi  |  Omat jutut  |  Muiden jutut  |  Kategoriat  |  kirjaudu