Traceback StackOverflow异常

时间:2011-02-10 13:21:45

标签: c# iis-7

我有一个使用公平的用户控件的Umbraco站点,其中某个地方 - 不知何故,堆栈溢出异常会不时被抛出。 由于当测试与用户发布或获取某些信息有关时,SOE不会发生(足够公平:我错过了一些信息)。

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

2 个答案:

答案 0 :(得分:0)

我发现调试应用程序(有时必须将VS附加到正确的w3wp.exe进程)并将VS设置为中断异常是最多的很有帮助。你仍然可以看到堆栈跟踪,它充满了同一系列的方法调用。

答案 1 :(得分: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

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

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

我真的相信更多人应该意识到DUMP文件与Debug Diagnostics一起使用是多么令人难以置信,以找到生产环境中发生的任何错误,我们没有可用的便捷开发工具。