Show / Hide Table of Contents

MSDN.WhiteKnight - Stack Overflow answers

Ответ на "Как подключиться из C# к другому .NET процессу?"

Answer 976435

Link

Например, используя 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.

Back to top Stack Overflow answers (published from sources in GitHub repository). Copyright (c) 2020, MSDN.WhiteKnight. Content licensed under BSD 3-Clause License.
Generated by DocFX