Я хочу распечатать список всех различных типов, загруженных в работающий процесс .NET. Мой план состоит в том, чтобы в конечном итоге построить приложение с графическим интерфейсом на основе этого, поэтому я хочу сделать это из своего кода, а не стороннего инструмента. Я думаю, что лучше всего использовать MDbgCore для присоединения к запущенному процессу, а затем использовать MDbgProcess.AppDomains для получения объектов CorAppDomain и попробовать пройти объектную модель вниз.
Однако я не могу на всю жизнь остановить другой процесс и посмотреть какие-либо домены приложений. Я использую код, подобный следующему (который основан на коде из блога Майка Сталла )
[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.Trace, но это связано с отслеживанием выполнения MDbg с использованием TraceListeners, а не с отслеживанием целевого приложения.
Я запускаю мое приложение noddy debugger в режиме выпуска, а цель в режиме отладки. Я использую Visual C # 2010, и я нахожусь в конце своего ума. Кто-нибудь может пролить свет на это?