通常のトラブルシューティング手順では対応できない場合があります。より高度な、法医学的なトラブルシューティングが必要になるかもしれません。今日はそのために役立つツールについて書きます。Dependency WalkerはDLLの依存関係を見つけて、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を使用してエラーを調査するには、次の手順に従います。
- Dependency Walkerを起動します
- ファイルメニューの[開く]をクリックして、問題のファイルを読み込みます
- [表示]メニューで、[プロファイリングの開始]をクリックします。プロファイルモジュールダイアログボックスが表示されます
- 使用するスイッチ、プログラム引数、その他のオプションを入力し、[OK]をクリックします。
Dependency Walkerは、エラーが発生する前にdwinject.dllを挿入し、エラー発生時のイベントをログに記録します。
Dependency Walkerのダウンロード
こちらからDependency Walkerをダウンロードできます。
コメントする