有人可以澄清,如果由WER产生的内存转储是由procdump.exe产生的相同? 同时使用这两个工具会冲突吗? 如果我的目标是为服务(在Server 2012 R2平台上)解决“服务意外终止”types的事件,那么正确的方法是什么?
当应用程序崩溃时,procdump和WER都可以捕获用户模式崩溃转储。
根据经验,转储越全面越有用,因为小转储和混合转储以及自定义转储都会省略一些可能在根本原因调查中有用的数据节省磁盘空间。
WER默认捕获微型转储, 但可以configuration捕获完整转储。
(在这种情况下,当我说“全面转储”时,我的意思是所涉及的进程的全部用户模式进程地址空间 – 任何内核模式都不在作用域内。)
另一方面,procdump.exe是Sysinternals工具(Mark Russinovich,Andrew Richards等),其devise比WER更灵活。 如果WER是黄油刀,procdump是瑞士军刀。 例如,procdump.exe可以configuration为在进程保持大于90%的CPU使用率10秒或使用500MB以上的内存时自动捕获转储(或一系列转储)等。procdump也可以设置作为永久性的AeDebug事后debugging器,这基本上使它成为WER的替代品。
WER工作得很好,(特别是当configuration捕获完整的进程转储时),WER和procdump都捕获相同types的转储,但只需要一个或另一个转储。 尝试使用它们都没有任何意义。
procdump -ma -i C:\Dumps将procdump.execonfiguration为在计算机上的任何用户模式进程崩溃时自动执行完整进程内存转储,并将其放在C:\ Dumps目录中。
这也将捕获Windows服务崩溃,除非服务的开发人员专门编写服务来执行自己的exception处理,并避免被debugging器捕获,这是非常罕见的。 (即使如此,procdump也可以configuration为在首次机会的情况下转储。)
PS:如果服务实际崩溃,您可能会看到“服务意外终止”消息,但是如果服务感觉需要退出,而没有像服务pipe理器那样配合服务pipe理器,您也可能看到相同的消息。 在这种情况下,服务的开发人员只是一个糟糕的开发人员,由于没有实际的崩溃,WER和procdump都不会帮助你。