2011-02-10 129 views
2

我有一个Umbraco网站使用公平的用户控件,其中,某处 - 某种程度上,某种程度上,stackoverflow异常会不时被抛出。 由于当测试与用户发布或获取某些信息(足够公平:我错过了某些内容)有关时,SOE不会发生。回溯StackOverflow异常

如何追溯我的代码中发生了我的stackoverflow异常?有工具可用来检查我的来源,看看我是否错过了一些递归方法?或者我该如何调试正在运行的进程?

+2

记录日志记录日志。 –

+0

IIS扩展日志,数据库调用日志记录,事件查看器..的作品 - 只是似乎无法查明在哪里。 – riffnl

回答

0

我发现调试应用(有时不得不VS连接到正确的w3wp.exe过程)和异常是最有用的设置VS到休息。您仍然可以看到堆满了同一系列方法调用的堆栈跟踪。

+0

在开发机器上 - 这个工程和wooohooo,我终于找到罪魁祸首..由于一个条件,只有在闰年的满月期间发生,用户在三年前创建的某个页面会调用另外三页这会再次调用第一页...(很高兴我已经分类!) – riffnl

0

如果应用程序崩溃,启用此注册表设置来创建一个故障转储全部崩溃的应用程序:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps] 
    "DumpFolder"="C:\\TEMP" 
    "DumpCount"=dword:00000010 
    "DumpType"=dword:00000002 

它会在你的C创建故障转储:\ Temp文件夹。或者在Visual Studio的新版本中打开这个转储文件,它将向您显示它崩溃的确切代码(就像如果您在哪里进行调试并且您有未处理的异常)。

或者一个非常有用的MS工具,可满足您所有的转储分析需求:调试诊断工具(https://www.microsoft.com/en-us/download/details.aspx?id=49924)。视频演练在这里:https://channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-123-DebugDiag-Part-3

这将分析你的崩溃的应用程序,并显示你所有的线程及其托管和非托管堆栈跟踪。 它很可能会指出您的崩溃问题以及发生的位置,因此您可以检查堆栈跟踪。

如果程序没有崩溃,您可以打开任务管理器并右键单击该进程并手动创建转储文件。通过调试诊断程序在崩溃分析中发送此转储文件时,它将向您显示应用程序中使用堆栈跟踪发生的最后一次X异常。当用户获得一个很好的简化错误信息时,我使用这种方法来查找用户应用程序的实际错误。作为从taskmanager创建转储的替代方法,您还可以使用procdump.exe或调试诊断本身来创建关于何时创建转储文件的规则。

我真的相信更多的人应该知道,一个DUMP文件和调试诊断程序一起发现在生产环境中发生的任何错误,我们没有我们方便的开发工具。