【问题标题】:Debug Diagnostic Tool not generating dumps on Crash调试诊断工具在崩溃时不生成转储
【发布时间】:2015-09-22 12:59:56
【问题描述】:

服务器:Windows 2012r2 调试诊断工具 v2.1 更新 1

调试器已附加到应用程序池。我已经确认它是该站点的正确池。池崩溃,但永远不会生成转储文件。

"应用程序池 '' 由于一系列原因被自动禁用 为该应用程序池服务的进程中的失败次数。”

规则只是简单地设置为查看应用程序池,而不是捕获第一次机会异常。我已经尝试删除并重新添加了几次,但它从未生成转储。

我检查了它生成的调试日志,这是在池崩溃之前生成的最后一个异常:

警告:帧 IP 不在任何已知模块中。以下帧可能是 错误的。 0x0 0x0 0x0

编辑:想要添加转储确实为第一次机会异常生成。这似乎只是在尝试捕捉第二次机会或实际导致崩溃的机会时才会出现问题。

编辑 2:每个请求的调试日志之一的最后几行:

[9/16/2015 7:21:31 PM]
  Exception 0XC00000FD on thread 154788.  DetailID = 48
  Thread created. New thread system id - System ID: 85156
  Thread exited. Exiting thread system id - System ID: 85156. Exit code - 0x00000000
  Thread exited. Exiting thread system id - System ID: 326816. Exit code - 0x800703e9
  Thread exited. Exiting thread system id - System ID: 41368. Exit code - 0x800703e9
  Thread exited. Exiting thread system id - System ID: 213340. Exit code - 0x800703e9
  Thread exited. Exiting thread system id - System ID: 300224. Exit code - 0x800703e9
  Thread exited. Exiting thread system id - System ID: 51008. Exit code - 0x800703e9
  Thread exited. Exiting thread system id - System ID: 45288. Exit code - 0x800703e9
  Thread exited. Exiting thread system id - System ID: 75176. Exit code - 0x800703e9
  Thread exited. Exiting thread system id - System ID: 143512. Exit code - 0x800703e9
  Thread exited. Exiting thread system id - System ID: 68504. Exit code - 0x800703e9
....... (goes on like this for awhile)
Process exited. Exit code - 0x800703e9

异常与此相关

DetailID = 48
    Count:    1
    Exception #:  0XC00000FD
    Stack:        

        WARNING: Frame IP not in any known module. Following frames may be wrong.
        0x0
        0x0
        0x0
        0x0
        0x0

【问题讨论】:

  • 也许您遇到了Known issue relating to Windows 7 kernel symbols,这也可能适用于 Server 2012R2。检查您的 ntdll 符号是否有类型信息。根据 DebugDiag 在内部的工作方式,它需要该类型信息。
  • 嗯,听起来这与生成转储后的读取更相关。在这种情况下,我无法开始生成转储。
  • “调试器已附加” - 这是什么意思?调试器通常会收到未处理异常的通知,因此它会中断。然后,第二次机会异常消失了,DebugDiag 无法再处理异常。
  • 顺便说一句:也许将其标记为debugdiag
  • 刚才我已经告诉调试诊断工具查看崩溃的应用程序池。感谢添加标签。

标签: .net windows debugging iis debugdiag


【解决方案1】:

默认情况下,debugdiag 崩溃规则仅对所有未处理的第二次机会异常进行转储(如果您创建崩溃规则并将所有设置保留为默认值),因此如果未生成转储,则该进程不会因第二次而崩溃机会异常。

有时 CLR 在遇到致命异常时会调用 TerminateProcess 函数(堆栈溢出就是其中之一)。因此,如果您的进程因此类异常而崩溃,那么您将不会使用默认规则获得转储,您应该更改规则以包含默认断点列表中存在的 ntdll terminateprocess 断点。启用此断点的不良影响是,现在即使是安全退出(如工作进程空闲关闭、回收等),您也会得到转储,因此您需要检查记录的事件的时间戳并将转储文件与之匹配...

如果您粘贴您在 debugdiag 为 w3wp.txt 生成的文本文件中看到的内容的最后 5-10 行,将会有所帮助。

编辑:添加我在调试器中看到的调用堆栈...

0:065> kL 50
# ChildEBP RetAddr  
00 1a8f291c 74b80947 ntdll!NtTerminateProcess
01 1a8f292c 73e0843d KERNELBASE!TerminateProcess+0x23
02 1a8f29b8 73e07d03 clr!EEPolicy::HandleFatalStackOverflow+0x1ba
03 1a8f29e8 73dca49f clr!EEPolicy::HandleStackOverflow+0x1ac
04 1a8f2a0c 76f500b1 clr!COMPlusFrameHandler+0x9b
05 1a8f2a30 76f50083 ntdll!ExecuteHandler2+0x26
06 1a8f2afc 76f507ff ntdll!ExecuteHandler+0x24
07 1a8f2afc 17732c83 ntdll!KiUserExceptionDispatcher+0xf
08 1a8f309c 17733104 App_Web_lotdetail_aspx_cdcab7d2_hoxucj_s!Unknown+0x1b
09 1a8f3184 17733104 App_Web_lotdetail_aspx_cdcab7d2_hoxucj_s!Unknown+0x49c
0a 1a8f326c 17733104 App_Web_lotdetail_aspx_cdcab7d2_hoxucj_s!Unknown+0x49c
0b 1a8f3354 17733104 App_Web_lotdetail_aspx_cdcab7d2_hoxucj_s!Unknown+0x49c
0c 1a8f343c 17733104 App_Web_lotdetail_aspx_cdcab7d2_hoxucj_s!Unknown+0x49c
0d 1a8f3524 17733104 App_Web_lotdetail_aspx_cdcab7d2_hoxucj_s!Unknown+0x49c
0e 1a8f360c 17733104 App_Web_lotdetail_aspx_cdcab7d2_hoxucj_s!Unknown+0x49c
0f 1a8f36f4 17733104 App_Web_lotdetail_aspx_cdcab7d2_hoxucj_s!Unknown+0x49c
10 1a8f37dc 17733104 App_Web_lotdetail_aspx_cdcab7d2_hoxucj_s!Unknown+0x49c

【讨论】:

  • 感谢您的详细回复。我添加了断点,看看它是否有帮助。不幸的是,这种崩溃每隔几天才会发生一次,因此无法快速知道。使用其中一个日志的最后一点编辑了主要主题。这是您要查找的信息吗?
  • 好的,我希望你现在能得到正确的转储。而且我忘记了我们的日志文件的日志格式在 debugdiag 2.0 中发生了一些变化,所以不,这不是我想看到的。基本上,日志文件有退出代码,类似于“进程退出。退出代码 - 0xffffffffe”,在 2.0 之前,这曾经是日志中的最后一行......你应该做的是从底部向上搜索“进程退出”的日志文件,看看您是否可以找到退出代码,因为这可能有助于理解一些事情
  • 好的,谢谢,我用相关信息更新了主题。日志中的条目是与系统日志中的进程崩溃相关的条目,并且是最后一个条目。
  • 顺便说一句,崩溃是由于堆栈溢出异常,正如我在最初的评论中提到的 C:\err>err 0x800703e9 # for hex 0x800703e9 / decimal -2147023895 : COR_E_STACKOVERFLOW corerror.h # MessageText:跨度>
  • 嗯,这次生成的转储文件,但似乎没有什么相关的。它说 crashhanganalysis 失败 - 无法将“System.UInt64”类型的对象转换为“System.String”类型。这次我尝试使用堆栈溢出异常再次重新配置它。
猜你喜欢
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多