如何调试在.NET中stackoverflowexception [英] How to debug a stackoverflowexception in .NET

查看:212
本文介绍了如何调试在.NET中stackoverflowexception的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

方案:

我刚刚上过辊和实施了一堆code,但是当我执行它我抛出一个StackOverflowException?该StackOverflowException没有一个堆栈跟踪,所以我卡住了。我知道为什么堆栈溢出可能发生,但要解决这个问题,我需要知道它的根。

I've just been on a roll and implemented a bunch of code, but when I execute it I get thrown a StackOverflowException? The StackOverflowException doesn't have a stacktrace so I'm stuck. I know why a stack overflow might occur, but to fix it I need to know where it's root is.

所有我得到的是:类型'System.StackOverflowException的未处理的异常发生标记 - 您 - it.dll

All I'm getting is: An unhandled exception of type 'System.StackOverflowException' occurred in tag-you're-it.dll

选项:

  1. 扫描通过所有的变化和尝试针尖问题。 (可能是缓慢的)
  2. 使用调试器和单步调试,直到你找到问题。 (大概比1更好。)
  3. 使用的配置文件和寻找最调用的方法。

PS:

这是一个假设情况(尽管不太常见),因此没有code是可用的。

This is a hypothetical situation (although not too uncommon) and therefore no code is available.

推荐答案

这是几乎总是由于递归。无论哪种方法自称,或方法调用,调用回等的方法。

This is almost always due to recursion. Either a method calling itself, or a method calling a method that calls it back and so on.

要找到它:

  • 更新时间::我不知道,但显然你不能得到的堆栈跟踪 StackOverflowException (我猜的东西做与不能够赶上之一,要么)。但是有办法获取转储<一个href="http://stackoverflow.com/questions/2591406/how-to-print-stack-trace-of-stackoverflowexception">as这里提到的。
  • 在ReSharper的将表明,称自己的方法(它把一个小绿圈中的侧栏递归调用),但它不会赶上递归当涉及两个或两个以上的方法。
  • 使用像蚂蚁探查的工具,看看哪些方法被调用的次数最多。
  • 请密切留意事件可能调用code火灾同时也意味着相同的事件触发,导致一个循环。
  • UPDATED: I didn't realise, but apparently you can't get the stack trace for a StackOverflowException (I guess something to do with not being able to catch one, either). However there are ways to get a dump as mentioned here.
  • ReSharper will show methods that call themselves (it puts a little green circle in the sidebar for recursive calls) though it won't catch recursion where two or more methods are involved.
  • Use a tool like ANTS Profiler to see which methods are called the most times.
  • Keep an eye out for events that fire that might call code that means the same event fires again, causing a loop.

有时候,你会得到错别字这样的,太:

Occasionally you'll get typos like this, too:

private string name;

public string Name
{
    get { return Name; } // Ooops! This is recursive, all because of a typo...
}

这是原因之一,我个人现在preFER使用自动属性。

Which is one reason why I personally now prefer to use automatic properties.

这篇关于如何调试在.NET中stackoverflowexception的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆