asp.net - 在 ASP.NET 中诊断 "Thread was being aborted."

标签 asp.net iis-7.5 windbg

我收到一条“线程正在中止”。在我的 ASP.NET 应用程序的堆栈跟踪中。我正在尝试使用此处描述的 WinDbg 技术来诊断: 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>

最佳答案

此日志显示您在某处出现超时。但是您的计算机上必须有其他一些事件,在女巫页面中显示您已超时。

如果发生多次超时,您首先需要找到导致该情况的页面,可能是保存 session 的下载页面,或者需要比设置的超时时间更多的时间运行的页面。

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

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

关于asp.net - 在 ASP.NET 中诊断 "Thread was being aborted.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14666753/

相关文章:

asp.net - 有多少公共(public)高流量网站是用 ASP.NET 构建的?

c# - 使用 signalr 在 asp.net 中存储数据

c# - iTextSharp : The process cannot access the file. 文件流似乎已关闭

asp.net - 使用 WinDbg 和 ADPlus 帮助捕获 StackOverflowException

visual-c++ - 什么是 msvcr80!_NLG_Return?

c++ - WinDbg 和内联函数

c# - 保存的 ZIP 文件损坏(从 Android 应用程序到 IIS 服务器)

c# - 在 Global.asax 的 Application_Start 方法中访问缓存时出错

c# - AzMan 对不同的服务器给出不同的结果

c# - ASPX 身份验证 cookie 过期时间始终为 30 分钟