Ответ 1
Вы можете использовать ProcDump из Sysinternals и сделать вашу программу на С#, когда это необходимо.
Process.Start("procdump " + otherProgramPID.ToString());
У меня есть объект System.Diagnostics.Process
. Моя программа С# контролирует ее для некоторых условий. Когда условие ударит, я хочу взять полный дамп памяти процесса.
Каков наилучший способ достичь этого?
Есть ли способ, который предоставляется CLR?
Вы можете использовать ProcDump из Sysinternals и сделать вашу программу на С#, когда это необходимо.
Process.Start("procdump " + otherProgramPID.ToString());
Вы можете попробовать вызвать метод С++ из своего кода на С#. Вот пример того, как вы его объявите:
[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