5

単体テストに、使用する DLL とその読み込み元を記録するログを追加したいと考えています。

Sysinternals の ListDLL から必要な情報を取得できますが、テスト プロセスの実行中にそれを実行する必要があり、最終的には競合状態になります。たとえば、ListDLL の実行が早すぎて、テスト実行の途中でロードされました。または、テスト プロセスが終了した後、ListDLL の実行が遅すぎる可能性があります。

同様に、Visual Studio デバッガーの [出力] ウィンドウと [モジュール] ウィンドウから必要な情報を取得できますが、ビルド サーバーでこれを自動化したいと考えています。

任意の EXE を実行し、それが使用する DLL を追跡し、情報をファイルに記録できるコマンド ライン ツールはありますか?

4

3 に答える 3

2

「デバッグ」機能を使用する独自のツールを作成できます。このツールは

  1. 中断された新しいプロセスを開始する
  2. 作成したプロセスにデバッガーとしてアタッチする
  3. 私が覚えているように、デバッグイベントを処理するには、LOAD_DLL_DEBUG_EVENTが必要です

http://msdn.microsoft.com/en-us/library/windows/desktop/ms679302(v=vs.85).aspx

于 2012-08-16T06:01:36.780 に答える
1

良いニュース: Detours を使って自分で書くのはそれほど難しくありません。LoadLibraryA/W 関数をフックし、DLL 名をファイルに記録します (実際の LoadLibrary が返す値に対して GetModuleFileName を使用します)。子プロセスによってロードされた DLL をログに記録できるように、CreateProcess もフックします。

悪いニュース: 使用したソース コードを投稿できるようにしたいのですが、これは共有できない内部ツールです。

編集:このツールの Detours フックが完全に信頼できるとは確信していません。テスト中にいくつかの DLL が見落とされたためです。デバッガー API を使用した代替ツールは次のとおりです: https://github.com/timrobinson/logdlls

于 2012-08-15T11:03:32.327 に答える
0

SysInternals (現在の MSFT: http://technet.microsoft.com/en-US/sysinternals ) には、アプリケーションのロード時に発生するあらゆる種類のイベントを追跡するための優れたツールがあります: Process Monitor. 調べているアプリケーションに関係のないものはすべて除外する必要があります。また、Operation="Load Image" フィルターを設定することもできます。

Tim Robinson のツールを試してみましたが、Windows 関連の dll のみを追跡するようで、私の場合は役に立ちません。

于 2014-02-18T03:20:10.613 に答える