Tips zu "Dependency Walker"


Wer auf seinem HandheldPC häufiger neue Software installiert und ausprobiert, kommt um ein Tool wie Dependency Walker nicht herum. Die überwiegende Mehrzahl aller Windows CE-Programme ist abhängig vom Vorhandensein sogenannter Bibliotheken, meist erkennbar an der Dateiendung DLL, in denen häufig genutzte Funktionen und Routinen ausgelagert sind. Allein das Betriebssystem selbst stellt schon einige Dutzend dieser DLLs zur Verfügung, auf die ein Software-Entwickler zugreifen kann, wenn sein Programm z.B. Hinweisfenster einblenden, Optionsdialoge aufbauen, Menüleisten anzeigen oder Benutzereingaben auswerten soll. Fehlt eine der von einem Programm aufgerufenen Bibliotheken, erscheint eine Fehlermeldung, die Applikation startet nicht. Leider gibt die Fehlermeldung keinen konkreten Hinweis, welche DLL fehlt (weitere Details siehe FAQ "Systembibliotheken"). Um den Fehler zu analysieren und das Programm vielleicht doch noch zum Laufen zu bringen, empfiehlt sich eben der Einsatz eines Tools wie "Dependency Walker".

"Dependency Walker" ist ein Programm für Desktop-Windows, es läuft also nicht auf dem Handheld selbst. Soll eine Windows CE-Applikation mit "Dependency Walker" unter die Lupe genommen werden, ist zunächst mindestens das EXE-File, noch besser das komplette Verzeichnis, das von der Setup-Routine der Applikation angelegt wurde, vom Handheld auf den Desktop-Rechner zu kopieren. Nun den "Dependency Walker" starten und über das 'File'-Menü die zu analysierende EXE oder DLL öffnen.
Tip: Bequemer geht's, wenn man den  "Dependency Walker" in das Kontextmenü des Windows-Explorers aufnimmt. Der "Dependency Walker" stellt dazu einen einfachen Optionsdialog zur Verfügung, zu finden unter 'Options/ Configure Handled File Extensions...' Völlig automatisch, aber zeitaufwendig geht es über den Button 'Search'. Alternativ und sehr viel schneller läßt sich dieses Feature konfigurieren, indem man die gewünschten Dateinamenerweiterungen (EXE und DLL sollten reichen) manuell einträgt und per 'Add' hinzufügt. Anschließend steht im Windows-Explorer bei einem Rechtsklick auf eine entsprechende Datei im Kontextmenü zusätzlich die Option 'View Dependencies' zur Verfügung.

Was "Dependency Walker" im Detail wie anzeigt, veranschaulicht am besten ein Beispiel.

In der Baumansicht links oben werden alle DLLs aufgelistet, die von der analysierten EXE aufgerufen werden. Ein gelbes Fragezeichen markiert Bibliotheken, die von "Dependency Walker" nicht gefunden wurden. Im konkreten Fall sind das drei Standardbibliotheken, die jeder HandheldPC mitbringt.

Überprüft werden auch gleich vererbte Abhängigkeiten, wenn also eine der aufgerufenen Bibliotheken selbst wiederum abhängig ist vom Vorhandensein einer anderen DLL. Diese vererbten Abhängigkeiten werden hierarchisch strukturiert dargestellt ähnlich der bekannten Ordnerdarstellung im Windows-Explorer. Bibliotheken, die auf einer höheren Hierarchieebene bereits aufgerufen und überprüft wurden, werden durch einen kleinen schwarzen Pfeil gekennzeichnet (im Screenshot oben zu sehen bei DKUIUTILS.DLL). Ein eher selten auftretender Fall ist das rot markierte Symbol bei MFCCE300.DLL; es kennzeichnet eine Komponente, die für eine andere CPU-Architektur kompiliert wurde.

Genaueres zu den einzelnen Bibliotheken erfährt man, wenn man mit der rechten Maustaste eine der DLLs in der Baumstruktur anklickt und den obersten Menüpunkt ''Highlight Matching Module In List' auswählt.

Zum einen wird nun in der Listenansicht unten die gewählte DLL hervorgehoben. Die Listenansicht bietet verschiedene Spalten. Die wichtigsten Informationen finden sich in den Spalten "CPU" (hier ist im Beispiel-Screenshot auch die Ursache für die Fehlermarkierung der MFCCE300.DLL zu sehen - das Modul ist für ARM-Prozessoren kompiliert, während alle anderen Komponenten auf MIPS R4000 laufen), "Subsystem" (im Beispiel Windows CE 2.0 oder höher mit grafischer Benutzeroberfläche) und "Subsystem Ver." (Mindestversion des Betriebssystems, im Beispiel also Windows CE 3.0).

Zum anderen werden rechts oben unter "E" die von der Bibliothek bereitgestellten Funktionen gelistet, unter "PI" die von der aufrufenden Komponente tatsächlich benötigten. Alle Routinen der DLL, die tatsächlich verwendet werden, sind in der Listendarstellung "E" zudem türkisfarben gekennzeichnet. Wichtig ist in diesem Zusammenhang noch die Spalte "Entry Point", insbesondere bei Dummy-Bibliotheken, die benötigt werden, um PocketPC-Programme auf dem HandheldPC ausführen zu können. Klickt man den Spaltenkopf an, werden die Funktionen in der Reihenfolge dargestellt, wie sie codiert in der Binärdatei vorliegen. Hat die nachfolgende Routine die selbe Startadresse, handelt es sich um die gleiche Funktion, nur mit einem anderen Namen (tritt bei Dummy-Funktionen häufig auf). Wird so eine Dummy-Funktion nun tatsächlich aufgerufen, kann sie dem aufrufenden Programm natürlich kein verwertbares Resultat liefern, das Programm funktioniert nicht oder stürzt ab.

Weitergehende Informationen sind der Onlinehilfe des Programms zu entnehmen.

(Herzlichen Dank für die fachkundige Unterstützung an Wolfgang Rolke)


Einen Fehler gefunden? Einen Link, der ins Leere weist? Anregungen zu dieser Seite?
Nehmen Sie Kontakt mit uns auf: webmaster@rothberger.net oder per Beitrag im Forum