Analyzing Dependencies with Dependency Walker
Innehållsförteckning:
Ibland kommer normala felsökningssteg inte att skära det. Vi kan behöva gå utöver - mer som rättsmedicinsk felsökning. Idag skriver jag om ett verktyg som hjälper oss att göra det. Dependency Walker är ett verktyg för att analysera beroende av en Windows-applikation - som funktioner, moduler etc. Det bygger ett hierarkiskt träd av alla beroende moduler i exe, dll, sys, etc.
Dependency Walker
Dependency Walker kan hjälpa dig med felsökning av programfel, fel på filregistrering, felaktigheter vid minnesåtkomst och ogiltiga sidfel.
Dependency Walker blir särskilt användbart om ett specifikt program inte laddas eller om en tjänst misslyckas att börja med ett fel som pekar på en specifik dll. I sådana fall kan du ladda det programmet eller dll i Dependency Walker, för att se vilken fil som inte laddar eller vilken modul som orsakar problemet - och fixa det.
Programmet laddar inte bara modulerna, utan det också skanningar för potentiella fel. Enligt hjälpfilen utförs följande jobb:
- Detekterar saknade filer. Det här är filer som krävs som ett beroende av en annan modul. Ett symptom på detta problem är "Det dynamiska länkbiblioteket BAR.DLL kunde inte hittas i den angivna sökvägen …" fel.
- Detekterar ogiltiga filer. Detta inkluderar filer som inte är kompatibla Win32 eller Win64 och filer som är korrupta. Ett symptom på detta problem är att "Programmet eller DLL-filen BAR.EXE inte är ett giltigt Windows-bild" -fel.
- Upptäcker import / exportmatchningar. Verifierar att alla funktioner som importeras av en modul faktiskt exporteras från de beroende modulerna. Alla olösta importfunktioner flaggas med ett fel. Ett symptom på detta problem är "procedurinmatningspunkten FOO kunde inte vara placerad i det dynamiska länkbiblioteket BAR.DLL" fel.
- Detekterar cirkulärberoende fel. Detta är ett mycket sällsynt fel, men kan uppstå med vidarebefordrade funktioner.
- Detekterar felaktiga CPU-typer av moduler. Detta inträffar om en modul som är byggd för en CPU försöker ladda en modul som är byggd för en annan CPU.
- Detekterar inkonsekvenserna i kontrollsumman genom att verifiera modulens kontrollsummor för att se om moduler har ändrats efter att de byggdes.
- Detekterar modulkollisioner av markerar alla moduler som inte laddas till sin favoritbasadress.
- Upptäcker moduleringsinitieringsfel genom att spåra samtal till modulens ingångspunkter och leta efter fel.
- Dependency Walker kan också utföra en körtidsprofil för din applikation för att detektera dynamiskt laddade moduler och modulinitieringsfel. Samma felkontroll från ovan gäller också dynamiskt laddade moduler.
Till exempel hjälpte jag en klient för andra gången - hon lastade Internet Explorer, men IE höll kraschar utan några specifika fel. Vi hade gjort de flesta av de grundläggande felsökningarna som inaktivera tillägg och verktygsfält, återställer IE till standardinställning etc. Men det fortsatte att krascha. Detta innebar att en eller flera filer som krävs för att Internet Explorer ska fungera korrekt, skapade ett problem. Det är alltid svårt att felsöka sådana fall, men med Dependency Walker kan vi se om något är fel med en av de beroende filerna.
Så laddar jag Internet Explorer i Dependency Walker.
Jag utvidgade listan en efter en
Sedan gick jag igenom alla modulerna för att se om jag kunde hitta något misstänkt där. Jag rullade igenom modulen och hade turen att hitta problemet.
Jag fann att filen IEFRAME.dll saknades. Så jag gick och ersatte filen från Windows Installation DVD. Det löste problemet. Nu kraschade Internet Explorer inte längre.
Jag hoppas att det här kommer att berätta hur enkelt det är att använda verktyget för att ta reda på eventuella beroendefel.
Så här använder du Dependency Walker
För att använda Dependency Walker för att undersöka fel kan du följa dessa steg:
- Start beroende Walker
- Klicka på Öppna på menyn File för att ladda upp problemfilen
- I menyn Visa, klicka på Starta profilering. Dialogrutan Profilmodul visas
- Skriv eventuella växlar, programargument, andra alternativ som du vill ha och klicka sedan på OK.
Dependency Walker kommer att injicera dwinject.dll innan felet inträffar och loggar händelserna som inträffar vid tidpunkten för felet.
Dependency Walker nedladdning
Du kan ladda ner Dependency Walker från här.