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