WindowsシステムでDependency Walkerを使用する方法

通常のトラブルシューティング手順では対応できない場合があります。より高度な、法医学的なトラブルシューティングが必要になるかもしれません。今日はそのために役立つツールについて書きます。Dependency WalkerDLLの依存関係を見つけて、Windowsアプリケーションの依存関係(関数、モジュールなど)を分析するツールです。exe、dll、sysなどのすべての依存モジュールの階層ツリーを構築します。

DLLの依存関係を見つける方法

Dependency Walkerは、32ビットまたは64ビットのWindowsモジュール(exe、dll、ocx、sysなど)をスキャンして、すべての依存モジュールの階層ツリー図を構築する無料のユーティリティです。アプリケーションエラー、ファイル登録エラー、メモリアクセス違反、無効なページフォールトのトラブルシューティングに役立ちます。

特定のプログラムがロードされなかったり、サービスがエラーで開始できず、特定のdllを指している場合に、Dependency Walkerは特に役立ちます。そのような場合、そのプログラムまたはdllをDependency Walkerにロードして、どのファイルがロードに失敗したか、どのモジュールが問題の原因となっているかを確認してから、修正することができます。

このプログラムはモジュールをロードするだけでなく、潜在的なエラーもスキャンします。ヘルプファイルによると、次のジョブを実行します。

  • 欠落したファイルを検出します。これらは、別のモジュールの依存関係として必要なファイルです。この問題の症状は、「指定されたパスに動的リンクライブラリBAR.DLLが見つかりません…」というエラーです。
  • 無効なファイルも検出します。これには、Win32またはWin64に準拠していないファイルと、破損したファイルが含まれます。この問題の症状は、「アプリケーションまたはDLL BAR.EXEは有効なWindowsイメージではありません」というエラーです。
  • インポート/エクスポートの不一致を検出します。モジュールによってインポートされたすべての関数が、依存モジュールから実際にエクスポートされていることを確認します。未解決のインポート関数はすべてエラーでフラグが立てられます。この問題の症状は、「動的リンクライブラリBAR.DLLでプロシージャのエントリポイントFOOが見つかりません」というエラーです。
  • 循環依存エラーを検出します。これは非常にまれなエラーですが、転送された関数で発生する可能性があります。
  • モジュールのCPUタイプが一致しないことを検出します。これは、あるCPU用に構築されたモジュールが、別のCPU用に構築されたモジュールをロードしようとした場合に発生します。
  • モジュールが構築された後に変更されたかどうかを確認するために、モジュールのチェックサムを検証して、チェックサムの不一致を検出します。
  • モジュールが優先ベースアドレスでロードされないモジュールを強調表示して、モジュールの競合を検出します。
  • モジュールエントリポイントへの呼び出しを追跡し、エラーを検索して、モジュール初期化の失敗を検出します。
  • Dependency Walkerは、アプリケーションの実行時プロファイルを実行して、動的にロードされたモジュールとモジュール初期化の失敗を検出することもできます。上記の同じエラーチェックは、動的にロードされたモジュールにも適用されます。

たとえば、先日、クライアントがブラウザをロードしていたところ、特定のエラーなしにクラッシュを繰り返していました。私たちは基本的なトラブルシューティングのほとんどを行いましたが、それでもクラッシュを続けました。これは、必要なファイルの1つ以上が問題を引き起こしていたことを意味します。このようなケースのトラブルシューティングは常に困難ですが、Dependency Walkerを使用すると、依存ファイルのいずれかに問題があるかどうかを確認できます。

そこで、Dependency Walkerにブラウザのプロセスをロードしました。

次に、リストを1つずつ展開しました。

その後、各モジュールを調べて、疑わしいものがないか確認しました。モジュールをスクロールして、運よく問題を見つけました。

特定のdllファイルが欠落していることがわかりました。そこで、WindowsインストールDVDからそのファイルを置き換えました。これで問題は解決しました。これでブラウザはクラッシュしなくなりました。

このツールを使用して、考えられる依存関係のエラーを検出するのがいかに簡単であるかが、お分かりいただけたと思います。

WindowsシステムでDependency Walkerを使用する方法

Dependency Walkerを使用してエラーを調査するには、次の手順に従います。

  1. Dependency Walkerを起動します
  2. ファイルメニューの[開く]をクリックして、問題のファイルを読み込みます
  3. [表示]メニューで、[プロファイリングの開始]をクリックします。プロファイルモジュールダイアログボックスが表示されます
  4. 使用するスイッチ、プログラム引数、その他のオプションを入力し、[OK]をクリックします。

Dependency Walkerは、エラーが発生する前にdwinject.dllを挿入し、エラー発生時のイベントをログに記録します。

Dependency Walkerのダウンロード

こちらからDependency Walkerをダウンロードできます。