実行中の .NET プロセスにロードされたすべての異なるタイプのリストを出力したいと考えています。私の計画は、最終的にこれに基づいて GUI アプリを構築することなので、サードパーティのツールではなく、自分のコードからこれを行いたいと考えています。私の最善の策は、MDbgCore を使用して実行中のプロセスにアタッチし、次に MDbgProcess.AppDomains を使用して CorAppDomain オブジェクトを取得し、オブジェクト モデルを試してみることです。
ただし、私の人生では、他のプロセスを停止して AppDomains を確認することはできません。私は次のようなコードを使用しています (これは、Mike Stall のブログのコードに基づいています) 。
[MTAThread] // MDbg is MTA threaded
static void Main(string[] args)
{
MDbgEngine debugger = new MDbgEngine();
debugger.Options.StopOnModuleLoad = true;
// Launch the debuggee.
int pid = Process.GetProcessesByName("VS2010Playground")[0].Id;
MDbgProcess proc = debugger.Attach(pid);
if (proc.IsAlive)
{
proc.AsyncStop().WaitOne();
Console.WriteLine(proc.AppDomains.Count);
if (proc.AppDomains.Count > 0)
{
Console.WriteLine(proc.AppDomains[0].CorAppDomain);
}
}
Console.WriteLine("Done!");
}
これは以下を出力します:
MDbgPlayground.exe
0
Done!
debugger.Options.Stop* のさまざまなフレーバーを試しました。すべてのメソッドを繰り返し処理し、それらすべてにブレークポイントを設定することを考えましたが、Modules リストも繰り返し処理できません。debugger.Options.Trace を試してみましたが、それはターゲット アプリをトレースするのではなく、TraceListeners を使用して MDbg の実行をトレースすることに関係しています。
noddy デバッガー アプリをリリース モードで実行し、ターゲットをデバッグ モードで実行しています。私は Visual C# 2010 を使用していますが、頭がいっぱいです。誰でもこれに光を当てることができますか?