Подтвердить что ты не робот

Использование дампа памяти с использованием С#

У меня есть объект System.Diagnostics.Process. Моя программа С# контролирует ее для некоторых условий. Когда условие ударит, я хочу взять полный дамп памяти процесса.

Каков наилучший способ достичь этого?

Есть ли способ, который предоставляется CLR?

4b9b3361

Ответ 1

Вы можете использовать ProcDump из Sysinternals и сделать вашу программу на С#, когда это необходимо.

Process.Start("procdump " + otherProgramPID.ToString());

Ответ 2

Вы можете попробовать вызвать метод С++ из своего кода на С#. Вот пример того, как вы его объявите:

    [DllImport("dbghelp.dll",
        EntryPoint = "MiniDumpWriteDump",
        CallingConvention = CallingConvention.StdCall,
        CharSet = CharSet.Unicode,
        ExactSpelling = true,
        SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool MiniDumpWriteDump(
        IntPtr hProcess,
        uint processId,
        SafeHandle hFile,
        MINIDUMP_TYPE dumpType,
        IntPtr expParam,
        IntPtr userStreamParam,
        IntPtr callbackParam);

Вы можете проверить код этого проекта для примера: https://github.com/projectkudu/kudu/blob/master/Kudu.Core/Infrastructure/MiniDumpNativeMethods.cs https://github.com/projectkudu/kudu/blob/2db563be679bb60656050ec3f04945086f07b360/Kudu.Core/Infrastructure/ProcessExtensions.cs