什么是崩溃转储(crash-dump)和挂起转储(hang-dump)之间的区别?
假设我编写一个实用程序,在单击时创建进程的转储,如何通知实用程序创建适当的转储?
不确定你的意思,它们都是应用程序/内核状态(内存)的转储,具有不同级别的详细信息。无论应用程序是否挂起或崩溃,在构成转储方面都有些不相关,可以参见此doc和这里http://www.debuginfo.com/articles/easywindbg2.html#savedumps崩溃转储将具有崩溃本身的异常记录。
MiniDumpWriteDump: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680360%28v=vs.85%29.aspx
不同类型的转储: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680519%28v=vs.85%29.aspx转储只是进程的快照。
崩溃情况较容易监控。 应用程序引发了一些未处理的异常,监视进程会对故障进程进行快照。 如果您没有设置任何监视,则Windows操作系统最终会为您生成一个小型转储文件。
挂起情况(或100% CPU占用)是特定于应用程序的,因此更难以监控。 如果应用程序无响应或CPU密集型,可能是因为它正在进行某些计算? 也许它等待某些网络数据? 也许应用程序GUI是响应的,但两个后台工作线程死锁了?
通常,我建议手动生成挂起转储。当最终用户/QA工程师确定出现问题时。 自动化挂起转储可以完成,但是生成这些转储的决策是特定于应用程序而定的。