private static void CreateMiniDump(string processName)
{
var pl = Process.GetProcessesByName(processName);
if (pl.Length == 0)
{
Console.WriteLine($”找不到进程:{processName}”);
return;
}
var process = pl[0];
{
Process.Start(“plugins//procdump.exe”, $”-ma {process.Id} -o {AppDomain.CurrentDomain.BaseDirectory}”);
//MiniDumpWriteDump(process.Handle,
// process.Id,
// fs.SafeFileHandle.DangerousGetHandle(),
// MINIDUMP_TYPE.MiniDumpNormal,
// IntPtr.Zero,
// IntPtr.Zero,
// IntPtr.Zero);
Console.WriteLine(“完成”);
}
}
[DllImport(“dbghelp.dll”)]
public static extern bool MiniDumpWriteDump(IntPtr hProcess,
Int32 ProcessId,
IntPtr hFile,
int DumpType,
IntPtr ExceptionParam,
IntPtr UserStreamParam,
IntPtr CallackParam);
public static class MINIDUMP_TYPE
{
public const int MiniDumpNormal = 0x00000000;
public const int MiniDumpWithDataSegs = 0x00000001;
public const int MiniDumpWithFullMemory = 0x00000002;
public const int MiniDumpWithHandleData = 0x00000004;
public const int MiniDumpFilterMemory = 0x00000008;
public const int MiniDumpScanMemory = 0x00000010;
public const int MiniDumpWithUnloadedModules = 0x00000020;
public const int MiniDumpWithIndirectlyReferencedMemory = 0x00000040;
public const int MiniDumpFilterModulePaths = 0x00000080;
public const int MiniDumpWithProcessThreadData = 0x00000100;
public const int MiniDumpWithPrivateReadWriteMemory = 0x00000200;
public const int MiniDumpWithoutOptionalData = 0x00000400;
public const int MiniDumpWithFullMemoryInfo = 0x00000800;
public const int MiniDumpWithThreadInfo = 0x00001000;
public const int MiniDumpWithCodeSegs = 0x00002000;
}
static void Main(string[] args)
{
//https://docs.microsoft.com/en-us/sysinternals/downloads/procdump
//procdump -ma 4572
Console.WriteLine(“正在生成内存快照,请稍等”);
CreateMiniDump();
for (int i = 5; i > 0; i–)
{
Console.WriteLine($”完毕,{i}秒后退出…”);
Thread.Sleep(1000);
}
}
原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/270588.html