2

実行時に動的な型が発行されるアプリケーションがあります。生成された .NET コードを検査するために、動的に生成されたアセンブリを保存し、Reflector を使用します。

動的アセンブリを保存せずに、それぞれのプロセスの実行中にリフレクターの方法でそれらを反映する方法があるかどうか疑問に思っていますか? つまり、リフレクターに「プロセスにアタッチ...」ボタンのようなものを用意します。

ありがとう。

編集:この機能の唯一の存在理由は、動的に生成されたアセンブリを反映することです。

4

2 に答える 2

2

動的アセンブリから派生する C# コードをおそらく探していると思いますが、この質問はかなり古いものです...

Visual Studio のイミディエイト ウィンドウまたはWinDbgを使用して、実行中の動的アセンブリの IL を取得できます。( Visual Studio はまだ 32 ビット製品であるため、64 ビット プロセスをデバッグする場合は WinDbg を使用する必要があります。)

  1. プロセスにアタッチします
    • WinDbg : 別のプロセスがデバッガーとして既にアタッチされている場合、これは「非侵襲的に」実行する必要があります。F6 を押して (または [ファイル] -> [プロセスにアタッチ] を選択)、VS が既にアタッチされている場合は [非侵襲的] オプションを選択します。
    • Visual Studio : [デバッグの開始] を選択するか F5 キーを押すと、VS はこれを自動的に実行しますが、デバッグ メニューで [プロセスにアタッチ] を選択すると手動で実行できます。
  2. !load SOS.dllコマンドまたは単にを使用して SOS.dll をロードし!load SOSます。
    • WinDbg : 非侵入モードでは、WinDbg には SOS.dll のフル パスが必要です。.NET 4 の場合、パスは次のようになりますC:\Windows\Microsoft.NET\Framework64\v4.0.30319\SOS.dll
  3. 実行を中断し、スレッドを選択します。
    これは、デバッガーでブレークポイントを設定するか、VS で例外ヘルパーをポップアップさせることで自動的に行うことができます。
    • WinDbg~ : 非侵入モードでは、コマンドと コマンドを使用して手動でスレッドを選択する必要があります~n s。を使用~してすべてのスレッドを一覧表示し、~n sコマンドを使用して切り替えます。たとえば、~12 sスレッド番号 12 に切り替えるために使用します。
  4. スタック トレースと命令ポインターを取得します。指示:!clrstack
  5. IP を取得し、どのメソッドを指しているかを見つけます。指示:!ip2md [address]
    • たとえば、ダンプするメソッドの IP が の場合0123456、コマンドを発行します!ip2md 0123456
  6. メソッドの IL をダンプします。指示:!dumpil [method descriptor]
    • たとえば、IP2MD コマンドが「0A1B2C3D as the address of the method descriptor, you would issue the command!dumpil 0A1B2C3D」をリストした場合。

これにより、IL アセンブリではありますが、動的アセンブリを確認できるようになります。

于 2011-07-08T00:14:48.647 に答える
-1

Reflector 用の実行中のアセンブリ アドインがあります ( http://weblogs.asp.net/kdente/articles/438539.aspx )。ただし、実行中のアセンブリのパスを取得するのに役立つだけで、アセンブリはその後 Reflector によってディスクから読み込まれるのではないかと思います。ただし、おそらく試してみる価値があります。また、Reflector アドインの作成はそれほど難しくないため、実行中のアセンブリ アドイン アプローチを拡張して、アセンブリをディスクに自動的に保存し、Reflector で読み込めるようにすることもできます (既存のアドインがまだこれを行っていません。)

于 2009-09-03T18:20:03.237 に答える