跟踪Windows服务中的stackoverflow错误

时间:2011-08-28 17:51:28

标签: c# windows-services stack-overflow

我对我的一个Windows服务做了一个小小的调整,而不是我运行它得到了,

描述:由于堆栈溢出,进程终止。

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

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

2 个答案:

答案 0 :(得分:7)

您可以订阅AppDomain.UnhandledException来记录异常。另一种选择是查看服务崩溃时是否生成了故障转储,并使用WinDbg来跟踪问题。您还可以configure windows生成这些转储。 WinDbg附带了可以附加到进程的脚本,以及当此进程崩溃时generate dump

从此article

  

...找到StackOverflowException并不难。如果你跑   !clrstack并找到一条200多行的callstack,你可以或多或少   确定这是你的问题。

更新:

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

答案 1 :(得分:3)

在不了解具体问题的情况下,我可以说StackOverflowException(或其原生等价物)是由99%的无限递归引起的。检查你的代码;确保你所知道的任何递归情况都有一个正确的结束情况,并确保你没有做一些愚蠢的事情,就像你想要访问一个字段时递归调用一个访问器或mutator一样:

private int something;

public int Something
{
    get
    {
        return Something; // return something;
    }

    set
    {
        Something = value; // something = value;
    }
}