我想打印出正在运行的 .NET 进程中加载的所有不同类型的列表。我的计划是最终基于此构建一个 GUI 应用程序,因此我想通过我的代码而不是第三方工具来实现这一点。我认为我最好的选择是使用 MDbgCore 附加到正在运行的进程,然后使用 MDbgProcess.AppDomains 获取 CorAppDomain 对象,并尝试将对象模型向下走。
但是,我无法终生停止其他进程并查看任何 AppDomain。我一直在使用如下代码(我基于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,但我束手无策。任何人都可以对此有所了解吗?