C# 回溯堆栈溢出异常

C# 回溯堆栈溢出异常,c#,iis-7,C#,Iis 7,我有一个使用大量用户控件的Umbraco站点,在其中的某个地方,不时会抛出stackoverflow异常。 由于SOE在测试is时不会发生,这与用户发布或获取一些信息有关(很公平:我错过了一些东西) 如何追溯代码中发生stackoverflow异常的位置?有没有工具可以检查我的源代码,看我是否遗漏了一些递归方法?或者如何调试正在运行的进程?我发现调试应用程序(有时必须将VS连接到正确的w3wp.exe进程)并将VS设置为异常时中断最有帮助。您仍然可以看到堆栈跟踪,其中充满了相同的一系列方法调用。

我有一个使用大量用户控件的Umbraco站点,在其中的某个地方,不时会抛出stackoverflow异常。 由于SOE在测试is时不会发生,这与用户发布或获取一些信息有关(很公平:我错过了一些东西)


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

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

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

如果应用程序崩溃,请启用此注册表设置为所有崩溃的应用程序创建崩溃转储:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]
    "DumpFolder"="C:\\TEMP"
    "DumpCount"=dword:00000010
    "DumpType"=dword:00000002
它将在您的C:\Temp文件夹中创建一个崩溃转储。或者在较新版本的Visual Studio中打开此转储文件,该文件将向您显示它崩溃的确切代码(就像您在调试时遇到未处理的异常一样)

或者是一个非常有用的MS工具,可以满足您的所有转储分析需求:调试诊断工具()。此处的视频演练:

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

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


我真的相信更多的人应该意识到,转储文件与调试诊断一起,在没有现成开发工具的生产环境中查找任何错误是多么容易。如果应用程序崩溃,请启用此注册表设置为所有崩溃的应用程序创建崩溃转储:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]
    "DumpFolder"="C:\\TEMP"
    "DumpCount"=dword:00000010
    "DumpType"=dword:00000002
它将在您的C:\Temp文件夹中创建一个崩溃转储。或者在较新版本的Visual Studio中打开此转储文件,该文件将向您显示它崩溃的确切代码(就像您在调试时遇到未处理的异常一样)

或者是一个非常有用的MS工具,可以满足您的所有转储分析需求:调试诊断工具()。此处的视频演练:

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

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


我真的相信更多的人应该意识到,在我们没有现成的开发工具的生产环境中,转储文件与调试诊断一起查找发生的任何错误是多么容易。

Logging.IIS extended Log,db call Logging,eventviewers。。工作-只是似乎无法精确定位where.Logging.IIS扩展日志、db调用日志、EventViewer。。工作-只是似乎无法精确定位在哪里。在开发机器上-这是工作,呜呜呜,我终于找到了罪犯。。由于这种情况只有在闰年满月时才会发生,用户在三年前创建的某个页面会调用其他三个页面,而这三个页面会再次调用第一个页面。。。(很高兴我把它整理好了!)在开发机器上——这很有效,我终于找到了罪魁祸首。。由于这种情况只有在闰年满月时才会发生,用户在三年前创建的某个页面会调用其他三个页面,而这三个页面会再次调用第一个页面。。。(很高兴我把它整理好了!)