代码之家  ›  专栏  ›  技术社区  ›  Guy

在windows服务中查找堆栈溢出异常

  •  4
  • Guy  · 技术社区  · 15 年前

    我继承了一个庞大而复杂的C#windows服务项目,它时不时地崩溃。日志系统没有记录任何我最初认为奇怪的消息,但我现在明白,如果出现堆栈溢出或内存不足异常,日志记录可能会失败。

    (Project使用VS2010,但仍以.net 3.5和C#3.0为目标)

    2 回复  |  直到 15 年前
        1
  •  3
  •   Cosmin Onea    15 年前

    下载 Debug Diagnostic Tool ,将它指向您的服务,并在异常列表中添加堆栈溢出,然后让它运行。当服务失败时,它将转储内存。在visualstudio中打开转储并检查所有线程上的所有堆栈以识别攻击性代码。您可能需要服务的原始调试符号来获取可理解的信息。

    here . 更多关于调试这类问题与苔丝费兰德斯手表 this

    更新: Tutorial 关于堆栈溢出异常的详细信息。它基于IIS中的web应用程序,但是您可以很容易地将相同的技术应用于服务,这只是您获取内存转储的方式不同而已。

    HTH公司

        2
  •  1
  •   Jaco Pretorius    15 年前

    你是不是在和 AppDomain.UnHandledException未处理异常 事件?如果发生未处理的异常,它应该引发一个事件。还有,你查过事件日志了吗?

    很难猜测是什么导致您的服务崩溃。如果您附加到我提到的事件,那么我猜它实际上只能是少数事件中的一个,StackOverflow异常就是其中之一。如果你不重视这个事件,它可能是任何东西。

    run the service as a console application 从VisualStudio内部。如果确实发生错误,VisualStudio应该向您显示错误。根据您的环境,这并不总是可能的。

    推荐文章