诊断“线程正在中止”。在ASP.net中

时间:2013-02-02 21:33:41

标签: asp.net iis-7.5 windbg

我正在接受“线程被中止”。在我的Asp.net应用程序的堆栈跟踪中。我正在尝试使用此处描述的windbg tecnique进行诊断: http://blogs.msdn.com/b/asiatech/archive/2012/06/21/how-to-troubleshoot-httpexception-request-timed-out-asp-net-4-0-64-bit.aspx 现在我只想在提供的示例asp.net应用程序中捕获这个。我可以让asp.net应用程序超时,但我无法获得文章中描述的转储生成。我想我需要一个windbg人的帮助来了解我哪里出错了。我包括了windbg条目。我的输出有点不同,但我无法分辨在所描述的aspnet_timeout.cfg文件中使用哪个地址。

0:038> .symfix
0:038> .loadby sos clr
0:038> !name2ee system.web.dll System.Web.RequestTimeoutManager+RequestTimeoutEntry.TimeoutIfNeeded
Module:      59201000
Assembly:    System.Web.dll
Token:       0600699b
MethodDesc:  592926e4
Name:        System.Web.RequestTimeoutManager+RequestTimeoutEntry.TimeoutIfNeeded(System.DateTime)
JITTED Code Address: 593f4200
0:038> !U 593f4200
preJIT generated code
System.Web.RequestTimeoutManager+RequestTimeoutEntry.TimeoutIfNeeded(System.DateTime)
Begin 593f4200, size 29. Cold region begin 59d14150, size 23
Hot region:
*** WARNING: Unable to verify checksum for C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Web\ccb5cc864818531ed9725d02d3d078a6\System.Web.ni.dll
>>> 593f4200 55              push    ebp
593f4201 8bec            mov     ebp,esp
593f4203 57              push    edi
593f4204 56              push    esi
593f4205 8bf1            mov     esi,ecx
593f4207 8b4e10          mov     ecx,dword ptr [esi+10h]
593f420a 8d4508          lea     eax,[ebp+8]
593f420d ff7004          push    dword ptr [eax+4]
593f4210 ff30            push    dword ptr [eax]
593f4212 3909            cmp     dword ptr [ecx],ecx
593f4214 e85f83f5ff      call    System_Web_ni+0x14c578 (5934c578) (System.Web.HttpContext.MustTimeout(System.DateTime), mdToken: 060025f7)
593f4219 8bf8            mov     edi,eax
593f421b 85ff            test    edi,edi
593f421d 0f852dff9100    jne     System_Web_ni+0xb14150 (59d14150)
593f4223 5e              pop     esi
593f4224 5f              pop     edi
593f4225 5d              pop     ebp
593f4226 c20800          ret     8
Cold region:
59d14150 8bce            mov     ecx,esi
59d14152 e849bb6cff      call    System_Web_ni+0x1dfca0 (593dfca0) (System.Web.RequestTimeoutManager+RequestTimeoutEntry.RemoveFromList(), mdToken: 0600699a)
59d14157 b9508f4859      mov     ecx,offset System_Web_ni+0x288f50 (59488f50) (MT: System.Web.HttpApplication+CancelModuleException)
59d1415c e8ef4c63ff      call    System_Web_ni+0x148e50 (59348e50) (System_Web_ni)
59d14161 8bd0            mov     edx,eax
59d14163 c6420401        mov     byte ptr [edx+4],1
59d14167 8bcf            mov     ecx,edi
59d14169 e89a0963ff      call    System_Web_ni+0x144b08 (59344b08) (System_Web_ni)
59d1416e e9b0006eff      jmp     System_Web_ni+0x1f4223 (593f4223)

aspnet_timeout.cfg

<ADPlus Version='2'>
      <!-- Configuring ADPlus to log all first chance exceptions -->
      <!-- Will still create full dump for any type of second chance exceptions -->
  <KeyWords>
     <keyword Name="loadbysos"> .loadby sos clr</keyword>
     <keyword Name="GetJIT"> !name2ee System.web.dll System.Web.RequestTimeoutManager+RequestTimeoutEntry.TimeoutIfNeeded </keyword>
     <keyword Name="JITAddress"> .foreach /pS 0n13 ( record {!name2ee System.web.dll System.Web.RequestTimeoutManager+RequestTimeoutEntry.TimeoutIfNeeded}) { r $t1= ${record}; bp $t1+0xb14150 ".dump /ma /u ${AdpDumpDirEsc}\\Full Request timed out ${AdpProcName}_.dmp;g"; .printf"*breakpoint list*\n"; bl}        </keyword>
  </KeyWords>
   <Settings>
                  <Option>  NoDumpOnFirst  </Option>
                  <RunMode> CRASH </RunMode>
  </Settings>
  <PreCommands>
         <DebugActions> loadbysos; GetJIT; JITAddress </DebugActions>
  </PreCommands>
</ADPlus>

1 个答案:

答案 0 :(得分:4)

此日志显示您在某处有TimeOut。但是你必须在你的计算机上有一些其他的事件,在巫婆页面显示你有时间。

如果您有很多次,您首先需要找到导致该会话的页面,可能是一个包含会话的下载页面,或者需要比Timeout设置需要更多时间才能运行的页面。

此执行timeout在web.config上设置,默认值为110秒:

<system.web>
    <httpRuntime executionTimeout="110"/>
</system.web>