我有一個System.Diagnostics.Process
對象。我的C#程序正在監視它的某些情況。當條件被擊中時,我想要進程的完整內存轉儲。使用C進行內存轉儲#
達到此目的的最佳方法是什麼?
有沒有辦法可以通過CLR?
我有一個System.Diagnostics.Process
對象。我的C#程序正在監視它的某些情況。當條件被擊中時,我想要進程的完整內存轉儲。使用C進行內存轉儲#
達到此目的的最佳方法是什麼?
有沒有辦法可以通過CLR?
您可以使用ProcDump from Sysinternals並讓您的C#程序在需要時調用它。
Process.Start("procdump " + otherProgramPID.ToString());
您可以嘗試從C#代碼中調用C++方法。這裏是你如何把它聲明的例子:
[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
*全*內存轉儲?如在「整個地址空間」? – Jon 2011-05-04 08:21:55