追踪windows服务中的stackoverflow错误

本文关键字:stackoverflow 错误 windows 服务 追踪 | 更新日期: 2023-09-27 18:06:47

我对我的一个windows服务做了一个小调整,然后我运行它,得到,

描述:进程因栈溢出而终止。

所以我回到旧版本并运行它,我仍然得到stackoverflow错误。

最糟糕的是我已经调试了两个,我没有得到这个错误再次发生。如何找到导致windows服务溢出的最佳方法?

追踪windows服务中的stackoverflow错误

可以订阅AppDomain。UnhandledException记录异常。另一种选择是查看服务崩溃时是否生成了崩溃转储,并使用WinDbg来跟踪问题。您还可以配置窗口来生成这些转储文件。WinDbg附带的脚本可以附加到该进程,并在该进程崩溃时生成转储文件。

摘自本文:

…找到StackOverflowException并不难。如果你逃跑. clstack并找到一个200行以上的调用堆栈,您可以或多或少这肯定是您的问题。

更新:

如果你使用。net 4.0,你需要将legacycorruptedstateexceptionsppolicy元素添加到服务配置文件中,以便在AppDomain.UnhandledException中记录异常。

在不了解更多具体问题的情况下,我可以说StackOverflowException(或其本机等价物)99%的情况下是由无界递归引起的。检查你的代码;确保你所知道的任何递归用例都有正确的结束用例,并确保你没有做一些愚蠢的事情,比如当你打算访问一个字段时递归地调用访问器或mutator:

private int something;
public int Something
{
    get
    {
        return Something; // return something;
    }
    set
    {
        Something = value; // something = value;
    }
}