调用:

// 放在主程序try-catch异常处理下
string dumpFile = System.IO.Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "dump.dmp");
MiniDumper.Write(dumpFile);

方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;namespace util
{/// <summary>/// 使用MiniDump导出内存快照MiniDumper/// </summary>sealed class MiniDumper{[Flags]public enum Typ : uint{// From dbghelp.h:MiniDumpNormal = 0x00000000,MiniDumpWithDataSegs = 0x00000001,MiniDumpWithFullMemory = 0x00000002,MiniDumpWithHandleData = 0x00000004,MiniDumpFilterMemory = 0x00000008,MiniDumpScanMemory = 0x00000010,MiniDumpWithUnloadedModules = 0x00000020,MiniDumpWithIndirectlyReferencedMemory = 0x00000040,MiniDumpFilterModulePaths = 0x00000080,MiniDumpWithProcessThreadData = 0x00000100,MiniDumpWithPrivateReadWriteMemory = 0x00000200,MiniDumpWithoutOptionalData = 0x00000400,MiniDumpWithFullMemoryInfo = 0x00000800,MiniDumpWithThreadInfo = 0x00001000,MiniDumpWithCodeSegs = 0x00002000,MiniDumpWithoutAuxiliaryState = 0x00004000,MiniDumpWithFullAuxiliaryState = 0x00008000,MiniDumpWithPrivateWriteCopyMemory = 0x00010000,MiniDumpIgnoreInaccessibleMemory = 0x00020000,MiniDumpValidTypeFlags = 0x0003ffff,};//typedef struct _MINIDUMP_EXCEPTION_INFORMATION {//    DWORD ThreadId;//    PEXCEPTION_POINTERS ExceptionPointers;//    BOOL ClientPointers;//} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;[StructLayout(LayoutKind.Sequential, Pack = 4)]  // Pack=4 is important! So it works also for x64!struct MiniDumpExceptionInformation{public uint ThreadId;public IntPtr ExceptioonPointers;[MarshalAs(UnmanagedType.Bool)]public bool ClientPointers;}//BOOL//WINAPI//MiniDumpWriteDump(//    __in HANDLE hProcess,//    __in DWORD ProcessId,//    __in HANDLE hFile,//    __in MINIDUMP_TYPE DumpType,//    __in_opt PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,//    __in_opt PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,//    __in_opt PMINIDUMP_CALLBACK_INFORMATION CallbackParam//    );[DllImport("dbghelp.dll",EntryPoint = "MiniDumpWriteDump",CallingConvention = CallingConvention.StdCall,CharSet = CharSet.Unicode,ExactSpelling = true, SetLastError = true)]static extern bool MiniDumpWriteDump(IntPtr hProcess,uint processId,IntPtr hFile,uint dumpType,ref MiniDumpExceptionInformation expParam,IntPtr userStreamParam,IntPtr callbackParam);[DllImport("kernel32.dll", EntryPoint = "GetCurrentThreadId", ExactSpelling = true)]static extern uint GetCurrentThreadId();[DllImport("kernel32.dll", EntryPoint = "GetCurrentProcess", ExactSpelling = true)]static extern IntPtr GetCurrentProcess();[DllImport("kernel32.dll", EntryPoint = "GetCurrentProcessId", ExactSpelling = true)]static extern uint GetCurrentProcessId();public static bool Write(string fileName){return Write(fileName, Typ.MiniDumpWithFullMemory);}public static bool Write(string fileName, Typ dumpTyp){using (var fs = new System.IO.FileStream(fileName, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.None)){MiniDumpExceptionInformation exp;exp.ThreadId = GetCurrentThreadId();exp.ClientPointers = false;exp.ExceptioonPointers = System.Runtime.InteropServices.Marshal.GetExceptionPointers();bool bRet = MiniDumpWriteDump(GetCurrentProcess(),GetCurrentProcessId(),fs.SafeFileHandle.DangerousGetHandle(),(uint)dumpTyp,ref exp,IntPtr.Zero,IntPtr.Zero);return bRet;}}}
}

C#使用Minidump导出内存快照Minidumper相关推荐

  1. 导出jvm的内存快照进行分析

    查找对应的进程id(PID) 使用 tasklist | findstr javaw.exe 或者知道被占用的端口使用 netstat -nao | findstr "8080" ...

  2. ARMS V4.3发布,应用监控全新支持内存快照分析,全息排查等功能。

    信息摘要: ARMS V4.3发布,应用监控全新支持内存快照分析,全息排查等功能. 适用客户: 企业开发和运维人员. 版本/规格功能: 1. 支持内存快照分析,内存对象分布一览无遗,内存泄露秒级定位. ...

  3. 【Android 内存优化】Android Profiler 工具常用功能 ( 监测内存 | 内存快照 )

    文章目录 一. 内存泄漏排查 ( Android Profiler 工具 ) 二. Android Profiler 内存监测相关功能 三.内存快照分析 内存泄漏原理 : 长生命周期对象 , 持有短生 ...

  4. 04 | 内存快照:宕机后, Redis 如何实现快速恢复

    文章目录 1. RDB内存快照的局限性 2. 给哪些内存数据做快照 3. 快照时数据能修改吗 4. 可以每秒做一次快照吗 4. 数据快速恢复 Redis 一另一种种持久化方法:内存快照.所谓内存快照, ...

  5. Java虚拟机(JVM)-- Dump内存快照

    1. Dump内存快照 在运行java程序的时候,有时候想测试运行时占用内存情况,这时候就需要使用测试工具查看了.在eclipse里面有 Eclipse Memory Analyzer tool(MA ...

  6. java 内存溢出时打印_如何在JVM内存溢出的时候自动dump内存快照

    解决OOM问题的一个初步思路 首先第一个问题,假设发生OOM了,必然说明系统中某个区域的对象太多了,塞满了那个区域,而且一定是无法回收掉那些对象,最终才会导致内存溢出的. 既然是这个思路,要解决OOM ...

  7. 宕机后,redis如何实现快速恢复?(RDB 内存快照)

    AOF 记录的是操作命令,而不是实际的数据,所以使用 AOF 方法进行故障恢复的时候,需要逐一把操作日志都执行一遍.如果操作日志非常多,redis 就会恢复得很缓慢,影响到正常使用.所以,redis ...

  8. Redis持久化:RDB内存快照

    AOF 方法好处:每次执行只需要记录操作命令,需要持久化的数据量不大.一般而言,只要你采用的不是 always 的持久化策略,就不会对性能造成太大影响. 但是,也正因为记录的是操作命令,而不是实际的数 ...

  9. Redis持久化——内存快照(RDB)

    最新:Redis持久化--如何选择合适的持久化方式 最新:Redis持久化--AOF日志 最新:Redis持久化--内存快照(RDB) 一文回顾Redis五大对象(数据类型) Redis对象--有序集 ...

  10. Redis核心技术与实战-学习笔记(五)内存快照RDB

    一.为什么需要RDB AOF 方法优势:每次执行只需要记录操作命令,需要持久化的数据量不大.在进行写后日志只要不采用always(同步写回)的持久化策略就不会对性能造成太大影响. AOF方法劣势:AO ...

最新文章

  1. jdk自带压测工具_FULL GC分析过程分享
  2. Linux tcp同时多个连接,Linux下网络编程(2)——TCP多连接,1个server,多个client...
  3. C程序在Ubuntu下创建运行
  4. web项目404错误统一跳转
  5. python regex_Python 正则表达式
  6. 在和人相处时的即时通讯软件
  7. SVG 教程 (二)矩形
  8. .net下汇总搜索引擎关键字编码
  9. 腾讯京东要建“反阿里联盟”?Python 或成 Excel 官方脚本语言;百度华为在一起 | 一周业界事
  10. python 编译器_Python教程:编译器与解释器
  11. python爬取一条新闻内容_自己做语料——Python爬取新闻联播文字版
  12. android 圆形图片按钮,Android自定义View圆形图片控件代码详解
  13. 微软放弃WPF了?自定义控件库有前途
  14. Laravel Eloquent 数据查询结果中日期的格式化
  15. win10cmd重置系统_win10命令行恢复出厂设置
  16. IT,互联网,科技,技术博客网站推荐
  17. [HCNA] IP地址和子网划分
  18. PQ8.05硬盘分区图文教程
  19. 【干货】数据结构与算法该如何正确学习?(书籍\视频\网站都推荐了)
  20. 为什么牙齿上有白白的东西?

热门文章

  1. Cad二次开发版本集合2000-2022
  2. 小区停车管理系统(SQL,JDBC)
  3. SAP Open SQL
  4. spyder安装matplotlib
  5. [从零开始学习FPGA编程-55]:视野篇-芯片的制程
  6. 红米note4android,红米Note4深度评测
  7. ubuntu用virtualbox安装windows
  8. 阿拉德之怒手游超详细图文架设教程
  9. 玄奥八字V5.6 爆破实例2
  10. 单元刚度矩阵 C++