Přeskočit navigaci

Tento blog byl již ukončen. Aktuální novinky ze světa Mozilly nyní hledejte na webu Mozilla.cz.

Jak ve Firefoxu hledat memory leaky

Od ledna existuje ve Firefoxu pěkná možnost vyhledávání některých typů memory leaků. Pokud chcete pomoci s jejich vyhledáváním, řiďte se pomocí následujícího návodu.

Prvně budete potřebovat poslední vývojou verzi Firefoxu. Možnost ladění memory leaků přijde i s Firefoxem 1.5.0.2, ale ten v době psaní tohoto příspěvku není k dispozici.

Vytvořte si nový uživatelský profil. Je důležité, aby se jednalo o čistý profil tj. bez jakýchkoliv rozšíření. Tím se zabrání jakýmkoliv negativním vlivům, které mohou mít rozšíření na výsledek hledání. Celkem užitečné je vyhledávání memory leaků i v různých rozšířeních, což se provádí tak, že se jednotlivá rozšíření postupně instalují (po testu opětovně odinstalují) a dle popisu níže se hledá, zda neobsahují memory leaky.

Dale budete potřebovat Perl pro Windows a perlový skript na analýzu. Pro správnou funkčnost potřebujete nastavit systémovou proměnnou NSPR_LOG_MODULES na hodnotu DOMLeak:5,DocumentLeak:5,nsDocShellLeak:5 a proměnnou NSPR_LOG_FILE na hodnotu nspr.log, což bude jméno výstupního logovacího souboru. Můžete jej tedy pojmenovat i jinak. Detailnější popis je uveden přímo v perlovém skriptu.

Celé testování probíhá vcelku jednoduše. Nakopírujete perlový skript do adresáře s Firefoxem (tam kde je spouštěcí soubor firefox.exe) a spustíte Firefox s kterým normálně pracujete. Ve stejném adresáři se vytvoří výstupní logovací soubor nspr.log (či jiný vámi nastavený), který se bude postupně plnit. Čím déle bude pracovat s Firefoxem, tím větší soubor bude. Nakonec ukončete Firefox.

Otevřete příkazový řádek a přesuňte se do adresáře s instalací Firefoxu a spusťte následující kód:

perl leak-gauge.pl nspr.log

Výstupem bude pár řádků do konzole. Výsledek by měl v ideálním případě vypadat podobně, jako v následujícím výstupu.

Leaked 0 out of 15 DOM Windows
Leaked 0 out of 44 documents
Leaked 0 out of 6 docshells

Výše uvedený výstup neodhalil žádný memory leak. Pokud za slovem "Leaked" naleznete jinou hodnotu než nula, našli jste memory leak. Takový memory leak je dobré nahlásit. Podotýkám, že nemá smysl hlásit něco, co se vám podařilo jednou provést a neumíte to zreprodukovat. Informace typu "sem přes den pracoval s webem a výstupem je memory leak" není užitečná a nikomu nepomůže. Je potřeba co nejvíce přibližně zreprodukovat problém. Hlášení typu "stává se to na této stránce" už užitečné je.

Upozornění: Při každém spuštění Firefoxu se obsah souboru nspr.log vymaže.

Nyní krátce k tomu, jak memory leaky dohledávat. Pokud vám analýza logu odhalí memory leak, většinou k výše uvedeným třem řádkům uvede, kde tento leak nastal. Buď se může jednat o URL stránky, jméno zdrojového souboru Firefoxu či adresu v paměti. Pokud se jedná o leak na webové stránce, spusťte Firefox, navštivte uvedenou stránku a ukončete Firefox. Nyní opětovně proveďte spuštění skriptu. Pokud se vám podařilo leak opětovně nadetekovat, je dobré ho nahlásit. Často se stává, že leak vznikne, když provedete na uvedeném webu konkrétní akci. Např. přejedete myši přes nějaký prvek, na něco konkrétního klepnete apod. Pokoušejte se tedy o akce, které jste dělali při poslední návštěvě, která zaznamenala memory leak.

Pokud skript odhalil memory leak ve zdrojovém souboru Firefoxu, souvisí chyba s rozhraním Firefoxu. V takovém případě zapřemýšlejte nad tím, co jste v rámci posledního spuštění dělali. Např. smazali záložku, otevřeli soubor z disku apod. Zkuste uvedené akce znovu a pokoušejte se memory leak zreprodukovat.

Co dál

Řada lidí nehlásí chyby, protože neumí moc anglicky, pracovat s nástrojem na hlášení chyb apod. Pokud se vám podle výše uvedeného návodu podaří zreproduktovat memory leak, napište mi, zkusíme ho více zkonkretizovat a případně nahlásit. Mějte však na paměti, že pokud se nebudete řídit výše uvedenými pokyny, nemá vaše hlášení smysl. Máteli k uvedenému návodu dotaz, můžete mi též napsat.

Přečtěte si také:

Linkuj si ! asdf.sk

Komentáře

K příspěvku dosud nebyl přidán komentář.

Přidat komentář

K tomuto příspěvku není možné přidávat další komentáře.