2011-05-04 18 views
17

Tengo un objeto System.Diagnostics.Process. Mi C# programa lo está monitoreando por alguna condición. Cuando se golpea la condición, quiero tomar un volcado de memoria completo del proceso.Toma de volcado de memoria usando C#

¿Cuál es la mejor manera de lograr esto?

¿Hay alguna manera de que sea proporcionado por CLR?

+0

* * volcado de memoria completa? Como en, "todo el espacio de direcciones"? – Jon

Respuesta

11

Puede usar ProcDump from Sysinternals y hacer que su programa C# lo llame cuando sea necesario.

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

Puede intentar llamar el método C++ desde el código C#. Aquí está un ejemplo de cómo se declarará:

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

Se puede extraer el código de este proyecto para un ejemplo: https://github.com/projectkudu/kudu/blob/master/Kudu.Core/Infrastructure/MiniDumpNativeMethods.cs https://github.com/projectkudu/kudu/blob/2db563be679bb60656050ec3f04945086f07b360/Kudu.Core/Infrastructure/ProcessExtensions.cs

Cuestiones relacionadas