C# 抓取进程快照 propDump方式

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);
}
}

posted @ 2022-06-27 21:51  灰主流  阅读(217)  评论(0编辑  收藏  举报