FOKSUK
WEER
CHESS
PUZZLE
GAMES

zaterdag 8 juni 2013

Terugkerende bluescreens verhelpen

Elke Windows-gebruiker kent het beruchte blauwe scherm. Na een crash kun je meestal opnieuw opstarten en zonder problemen doorgaan. Maar wat als je niet van de blauwe schermen af komt? Dan loont het om wat meer tijd te besteden aan debugging.

Op zoek naar de oorzaak
Probeer eerst te achterhalen hoe het bluescreen werd veroorzaakt. Opvallend genoeg zijn er maar drie mogelijke oorzaken.

Soft- of hardware kan zorgen voor een ‘unhandled exception’, een fout waarmee tijdens het programmeren geen rekening is gehouden en die het programma onderbreekt. Softwarebugs zijn hier een goed voorbeeld van.

Daarnaast kan een driver doelbewust crashen als er een risico bestaat op gegevenscorruptie. Denk bijvoorbeeld aan een programmeerfout die de cache van je harde schijf vervuilt: als Windows door zou lopen, zouden je gegevens corrupt kunnen raken. De driver laat dan je systeem crashen voor zijn eigen bestwil.

Tot slot kan ook kapotte hardware roet in het eten gooien. Als een geheugenlatje stuk gaat, kan het onvoorspelbare gegevens terugsturen waar Windows, drivers en programma’s niet mee om kunnen gaan.

Hoe kom je precies te weten wie nu de schuldige is? Daarvoor neem je een duik in de logbestanden.

Crashdump
Bij een blauw scherm roept de crashende driver of software de Windows-api KeBugCheckEx aan. Die zorgt ervoor dat het systeem ‘gecontroleerd crasht’: het geheugen wordt naar de harde schijf geschreven in een crashdumpbestand, je krijgt een blauw scherm te zien en het systeem kan opnieuw opgestart worden. Dat crashdumpbestand is een goudmijn voor de analyse. Je vindt er onder andere de status van je systeem en de laatste gebeurtenissen voor de crash in terug.

Voordat je crashes kunt analyseren, moet je er wel eerst voor zorgen dat je pc zulke crashdumps opslaat. Ga bij ‘Computer’ naar ‘Eigenschappen’ en klik op ‘Geavanceerde systeeminstellingen’. Kies op het tabblad ‘Geavanceerd’ voor ‘Opstart- en herstelinstellingen’. In de onderste helft van het dialoogvenster vind je de instellingen voor crashdumps.

Zorg dat onder ‘Foutopsporingsgegevens registreren’ een bestandsnaam is ingevuld voor de crashdump en kies het type dumpbestand. Je kunt een kleine dump (256 KB) kiezen, een kernelgeheugendump of het hele geheugen. Die laatste optie is alleen beschikbaar voor computers met 2 GB ram of minder, omdat anders het wegschrijven naar de harde schijf te lang duurt.

We kiezen voor de kernelgeheugendump, de uitgebreidste optie die nog zin heeft.

Dump analyseren
Om crashbestanden te kunnen analyseren, heb je een debugger nodig. Microsoft biedt die gratis aan. Installeer de Debugging Tools door de Windows SDK voor Windows 7 te downloaden. Kies in de installatiewizard alleen voor de Debugging Tools for Windows, een download van circa 170 MB.


Daarnaast heb je symbols nodig, bestanden die extra context verlenen aan de crashdumps. Stel daarvoor een omgevingsvariabele in. Klik met de rechtermuisknop op Mijn computer en kies voor ‘Eigenschappen’. Klik op ‘Geavanceerde systeeminstellingen’ en op het tabblad ‘Geavanceerd’ bij ‘Omgevingsvariabelen’. Voeg aan het onderste veld een nieuwe systeemvariabele toe met de naam _NT_SYMBOL_PATH en de waarde srv*C:\SYMBOLS*http://msdl.microsoft.com/download/symbols. De symbols worden dan bij het gebruik van de debugger automatisch gedownload en opgeslagen in de cachemap C:\Symbols.

Crash forceren
Nu kunnen we aan de slag. Alleen heb je wel een crashdump nodig. Kijk in de map die je hebt ingesteld als locatie voor crashdumps of er al een bestand staat (meestal met de naam memory.dmp).

Als dat niet het geval is, kun je wachten tot je systeem een keer crasht, maar wij gaan alvast handmatig een crash simuleren. Download daarvoor de gratis tool NotMyFault. Kies in het zip-bestand de x86-versie (voor 32-bit Windows) of de x64-versie (voor 64-bit) en pak de twee bestanden uit.


Voer notmyfault.exe uit om te kiezen op welke manier je het systeem wilt laten crashen. Voor onze doeleinden maakt het niet uit: klik op het tabblad ‘Crash’ op de knop ‘Crash’ om een blauw scherm voor je neus te krijgen. Het dumpbestand wordt aangemaakt en de pc start eventueel automatisch opnieuw op.

We duiken de logbestanden in en gebruiken daarvoor de debugger (via het startmenu onder Windows Kits, Debugging Tools x64 of x86, WinDbg). Druk op Ctrl+D om een crashdump te openen. Ga naar de locatie die je eerder hebt ingesteld (standaard C:\Windows) en open memory.dmp. Zorg er wel voor dat je WinDbg als administrator uitvoert.

Het bestand, dat honderden megabytes groot kan zijn, wordt ingeladen. Met verschillende tekstcommando’s, in te voeren op de opdrachtregel onderaan het scherm, kun je het bestand verder onderzoeken.

Analyze this!
Het belangrijkste tekstcommando is !analyze –v. Deze opdracht levert een uitgebreide lijst met informatie van de laatste stappen die tot de crash leidden.

Scrol iets naar boven om onder 'Bugcheck Analysis' de eerste informatie te kunnen bekijken. Als je het blauwe scherm aandachtig hebt doorgelezen, zul je hier bekende informatie tegenkomen. Als eerste vind je er de bugcheckcode, het type crash. Op msdn.microsoft.com/windows/hardware/hh994433 vind je een complete lijst van codes en wat ze betekenen.


Je weet zo misschien al wat de foutmelding betekent, maar welk programma veroorzaakt ze? Daarvoor scroll je weer wat naar beneden. Onder 'module_fault' zie je staan welke module de crash veroorzaakte. Dat kan een dll-bestand zijn, maar ook een programma. Klik op de onderstreepte programmanaam om meer informatie over het programma te krijgen. Zodra je weet welk programma of welke driver het is, kun je op zoek naar updates.

Erg interessant is ook de informatie onder 'stack_text'. Aan de rechterkant van de geheugendump zie je de laatst uitgevoerde opdrachten voor de crash, met de laatst gebruikte functie bovenaan. Dat kan helpen bij het ontdekken van de oorzaak van de crash.

Als de opdrachten voorzien zijn van duidelijke functienamen, kun je zien welk onderdeel van het programma de crash veroorzaakte. Daaruit is dan weer af te leiden waar het mis ging: als een driver vlak voor een crash steeds een functie aan blijkt te roepen die iets met de harde schijf probeert te doen, dan zit er een fout in de driver of is de schijf wellicht kapot.

WhoCrashed
Er is bijna geen limiet aan hoe diep je in Windows kunt gaan om te troubleshooten. Een goed beginpunt voor het werken met WinDbg is de videotutorial van Daniel Pearson, een ex-Microsoft-medewerker die is gespecialiseerd in probleemoplossing. In ongeveer een uur leidt hij je door de stappen die je kunt nemen als je pc onverklaarbaar crasht.

Wie geen zin heeft om zelf in logbestanden te duiken, of de Windows SDK niet kan installeren, kan ook nog aan de slag met het gebruiksvriendelijke WhoCrashed. Die heeft niet zo veel functies als Windows’ eigen debugger, maar is wel een stuk overzichtelijker. [zdnet]

0 reacties :

Een reactie posten