Jos et tiedä mikä on nightly build tai muistovuoto ei sano sinulle mitään, kannattaa lopettaa lukeminen tähän, sillä et todennäköisesti ymmärrä mitään mitä tämän jälkeen lukee.
Muistivuotojen jäljittäminen ei ole mitenkään helppoa puuhaa. Muistivuodot kuitenkin tuntuvat vaivaavan useita, joten kirjoitin ohjeet suomeksi siitä miten muistivuotoja voi yrittää jäljittää Windowsissa. Ohjeiden käyttö ei edellytä ohjelmointitaitoja, mutta kohtuullista koneenkäyttöä (ohjelmien lataus, Windowsin asetuksien muuttaminen, tiedostojen tallentaminen ja kopiointi sekä tieto siitä mikä nightly build on ja mitä sen asentaminen koneelle tarkoittaa) ja melko paljon työtä ja vaivaa.
Asennus- Lataa viimeisin nightly-versio ja asenna se: firefox-1.6a1.en-US.win32.installer.exe
http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/Voit käyttää myös vakaampaa release versiota nightlyn rinnalla kun asennat molemmat omiin kansioihinsa ja luot kummallekin oman profiilin ja teet molemmille omat pikakuvakkeet joissa käynnistät profiilin esimerkiksi -p profiilin_nimi parametrillä. Esim: c:softwareFirefoxfirefox.exe -p default
- Lataa tämä html-sivu koneellesi. Se sisältää Javascriptin jonka voi suorittaa vain jos tiedosto sijaitsee lokaalisti kovalevyllä. Tallenna tiedosto esim. työpöydälle.
http://lxr.mozilla.org/mozilla/source/tools/footprint/leak-gauge.html?raw=1- Aseta ympäristömuuttujat:
1. Mene Käynnistä->Asetukset->ohjauspaneeli->järjestelmä->lisäasetukset välilehti->ympäristömuuttujat
2. Lisää uusi käyttäjän ympäristömuuttuja painamalla Uusi... nappia.
3. Nimi: NSPR_LOG_FILE, Arvo: firefoxmemleak.txt
4. Ja toinen nimellä: NSPR_LOG_MODULES, Arvo: DOMLeak:5,DocumentLeak:5,nsDocShellLeak:5
5. Paina OK tallentaaksesi.
Käyttö1. Sulje kaikki selaimet ja käynnistä nightly-versio ja surffaile sillä hetki.
2. Sulje selain
3. Kopioi nightly-version asennuskansiosta löytyvä firefoxmemleak.txt toiseen kansioon turvaan.
4. Käynnistä selain ja avaa lokaalisti tallentamasi javascriptin sisältämä html-sivu selaimeen.
5. Paina "enter the filename" linkkiä, Firefox kertoo että javascript on tietoturvariski ja pyytää lupaa sen ajamiseen. Anna lupa ja etsi avautuvasta file-valikosta tiedosto jonka kopioit turvaan.
6. Näyttöön tulostuu tekstiä joka kertoo tuliko muistivuotoja.
Mikäli käytössä on myös release-versio. Voi tuon hoitaa hivenen helpommalla. Eli selaimen sulkemisen jälkeen käynnistää release-versiolla suoraan raportointi-html-sivun ja avaa firefoxmemleak.txt tiedoston suoraan nightly-version asennuskansiosta. Jolloin yksi tiedoston kopiointi jää väliin. Jos käyttää pelkkää nightly-versiota pitää tuo tiedoston kopiointi tehdä, koska selain luo aina uuden firefoxmemleak.txt tiedoston ja tallettaa sen vanhan päälle kun selain käynnistetään.
Huomaa että myös release-versio tekee tuon firefoxmemleak.txt tiedoston kun se käynnistetään. Tiedosto luodaan työkansioon joka on oletuksena asennuskansio, mutta jos esimerkiksi avaat selaimen tuplaklikkaamalla html-tiedostoa työpöydältä, on työpöytä silloin työkansiona.
Normaali tilanne näyttää tältä (ei muistivuotoja, kaikki vasemmanpuoleiset arvot nollina):
Koodi:
Summary:
Leaked 0 out of 24 DOM Windows
Leaked 0 out of 42 documents
Leaked 0 out of 5 docshells
Tyhjällä tiedostolla tulostus näyttää tältä (Kaikki arvot nollia. Tämä tarkoittaa yleensä sitä että Firefox tallensi tyhjän tiedoston. Yleensä se johtuu ympäristömuuttujissa olevasta virheestä tai väärän Firefox-version käyttämisestä):
Koodi:
Summary:
Leaked 0 out of 0 DOM Windows
Leaked 0 out of 0 documents
Leaked 0 out of 0 docshells
Muistivuodon sattuessa voi tulostua jotain tämänsuuntaista (vasemmalla on nollasta poikkeavia arvoja, sen lisäksi tulostuu alkuun muuta tekstiä):
Koodi:
Leaked outer window 1b11718 at address 1b11718.
Leaked inner window 1aeafe8 (outer 1b11718) at address 1aeafe8.
... with URI "about:blank".
Leaked outer window 1b859a8 at address 1b859a8.
Leaked inner window 1b9e5b8 (outer 1b859a8) at address 1b9e5b8.
... with URI "about:blank".
Summary:
Leaked 11 out of 91 DOM Windows
Leaked 22 out of 112 documents
Leaked 0 out of 34 docshells
** Vuodon toistaminen ja raportointi
Se että saat näkyviin listauksen muistivuodoista ei vielä auta paljoa. Sinun pitää myös keksiä miten sen saa toistettua. Raportissa näkyvät osoitteet voivat auttaa sinua muistamaan millä sivuilla olit kun muistivuodot tapahtuivat, mutta pelkkä sivuille meno ei välttämättä laukaise muistivuotoa. Pitää ehkä painaa jotain nappia tai tehdä jotain muuta. Sillä voi olla merkitystä oliko sivuhistoria tai cookiet tyhjiä vai täysiä kun menit sivulle.
Jos keksit miten saat toistettua bugin joka kerta,
kirjoita ohjeet siitä miten pitää toimia että vuoto tapahtuu. Oletusarvoisesti vuodon pitäisi syntyä
tyhjällä profiililla ja ilman laajennuksia ja tuoreimmalla versiolla (nightly buildista pitäisi tulla uusi versio joka päivä). Toisto-ohjeet voi raportoida bugzillaan kun on varmistanut ettei vastaavasta ole jo raportoitu tai sitten tänne foorumille jossa joku voi testata ongelman toistoa ja raportoida sen tarvittaessa.
Toisto-ohjeiden laatiminen on ehdottomasti vaikeinta ja työläintä tässä hommassa. Itse olen saanut noin 5 logia muistivuodoista, enkä kertaakaan ole keksinyt miten toisto onnistuisi.
Tämä perustuu osittain englanninkielisiin ohjeisiin joihin pääsee käsiksi täältä:
http://www.squarefree.com/2006/01/13/memory-leak-detection-tool/