MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Как подключиться из C# к другому .NET процессу?"
Answer 976435
Например, используя Microsoft.Diagnostics.Runtime. Впрочем, запросы у вас слишком велики: получить значения свойств без приостановки процесса (т.е. в пассивном режиме отладки) невозможно. Свойства - это, в конце концов, те же методы. Получить значение поля в пассивном режиме, конечно, можно. Например, следующий код демонстрирует присоединение к процессу в пассивном режиме, поиск в его управляемой куче объекта определенного типа и получение значения его поля:
using System; using Microsoft.Diagnostics.Runtime; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { DataTarget dt=DataTarget.AttachToProcess(17680,5000,AttachFlag.Passive); using (dt) { ClrInfo runtimeInfo = dt.ClrVersions[0]; ClrRuntime runtime = runtimeInfo.CreateRuntime(); ClrType type; foreach (ulong obj in runtime.Heap.EnumerateObjectAddresses()) { type = runtime.Heap.GetObjectType(obj); if (type == null) continue; if (type.Name == "System.Windows.Forms.Form" || (type.BaseType != null && type.BaseType.Name == "System.Windows.Forms.Form")) { Console.WriteLine("Address 0x{0:X}: {1}", obj, type.Name); ClrInstanceField f = type.GetFieldByName("Foo"); object val = f.GetValue(obj); if (val != null) Console.WriteLine(val.ToString()); } } } Console.ReadKey(); } } }
Примечание. Пример рассчитан на ClrMD v1.X. Во второй версии некоторые используемые API могли быть изменены.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.