Tag: 堆栈溢出

如何debugging:由于堆栈溢出,w3wp.exe进程被终止(在一台机器上工作,但不在另一台机器上)

问题 我有一个ASP.NET 4.0应用程序崩溃,在一台计算机上的堆栈溢出,但没有另一台。 它在我的开发环境中运行良好。 当我将站点移动到生产服务器时,它将引发堆栈溢出exception(在事件日志中看到),并且w3wp.exe工作进程死亡,并被replace为另一个。 到目前为止,我已经尝试过 作为参考,我使用debugging诊断工具来试图确定哪些代码导致溢出,但我不知道如何解释它的输出。 输出包括在下面。 ASP.NET网站如何在一台机器上导致堆栈溢出,而在另一台机器上则不会溢出? 经验丰富的线索表示赞赏。 我会将结果解决scheme发布到导致我的答案之下。 debugging输出 应用程序:w3wp.exe Framework版本:v4.0.30319说明:由于堆栈溢出,进程已终止。 In w3wp__PID__5112__Date__02_18_2011__Time_09_07_31PM__671__First Chance Stack Overflow.dmp the assembly instruction at nlssorting!SortGetSortKey+25 in C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\nlssorting.dll from Microsoft Corporation has caused a stack overflow exception (0xC00000FD) when trying to write to memory location 0x01d12fc0 on thread 16 Please follow up with the vendor Microsoft Corporation […]

堆栈溢出和缓冲区溢出有什么区别?

编程中堆栈溢出和缓冲区溢出有什么不同?

如何预测recursion方法的最大通话深度?

为了估计最大呼叫深度,recursion方法可以用给定量的存储器来实现,在堆栈溢出错误可能发生之前,用于计算所使用的存储器的(近似)公式是什么? 编辑: 许多人回答“依赖”,这是合理的,所以让我们用一个简单而具体的例子来删除一些variables: public static int sumOneToN(int n) { return n < 2 ? 1 : n + sumOneToN(n – 1); } 很容易certificate,在我的Eclipse IDE中运行这个在n下刚刚爆炸了1000(对我来说令人惊讶的低)。 这个通话深度限制是否已经被估计而不执行? 编辑:我不禁想到,Eclipse有一个固定的最大通话深度1000,因为我得到了998 ,但有一个主要的,一个最初的调用方法,总共1000 。 这是一个恕我直言,“太圆”是一个巧合。 我会进一步调查。 我只有Dux开销-Xss vm参数; 这是最大的堆栈大小,所以Eclipse runner必须在-Xss1000设置的地方

gson.toJson()抛出StackOverflowError

我想从我的对象生成一个JSONstring: Gson gson = new Gson(); String json = gson.toJson(item); 每当我尝试做到这一点,我得到这个错误: 14:46:40,236 ERROR [[BomItemToJSON]] Servlet.service() for servlet BomItemToJSON threw exception java.lang.StackOverflowError at com.google.gson.stream.JsonWriter.string(JsonWriter.java:473) at com.google.gson.stream.JsonWriter.writeDeferredName(JsonWriter.java:347) at com.google.gson.stream.JsonWriter.value(JsonWriter.java:440) at com.google.gson.internal.bind.TypeAdapters$7.write(TypeAdapters.java:235) at com.google.gson.internal.bind.TypeAdapters$7.write(TypeAdapters.java:220) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:200) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60) at com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:843) 这些是我的BomItem类的属性: private int itemId; private Collection<BomModule> modules; private boolean deprecated; […]

stackoverflow做拳击在C#

我在C#中有这两个代码块: 第一 class Program { static Stack<int> S = new Stack<int>(); static int Foo(int n) { if (n == 0) return 0; S.Push(0); S.Push(1); … S.Push(999); return Foo( n-1 ); } } 第二 class Program { static Stack S = new Stack(); static int Foo(int n) { if (n == 0) return 0; S.Push(0); S.Push(1); […]

如何发生“堆栈溢出”,你如何防止它?

堆栈溢出如何发生,以及确保不发生的最好方法或防止堆栈溢出的方法,特别是在Web服务器上,但其他示例也会很有趣?

Node.js – 超过最大调用堆栈大小

当我运行我的代码,Node.js抛出"RangeError: Maximum call stack size exceeded"exception引起的recursion调用太多。 我试图通过sudo node –stack-size=16000 app来增加Node.js的堆栈大小,但Node.js崩溃而没有任何错误信息。 当我没有sudo再次运行这个,然后Node.js打印'Segmentation fault: 11' 。 有没有可能解决这个问题,而不删除recursion调用? 谢谢

在try-catch中混淆来自无限recursion的输出

考虑下面的代码。 public class Action { private static int i=1; public static void main(String[] args) { try{ System.out.println(i); i++; main(args); }catch (StackOverflowError e){ System.out.println(i); i++; main(args); } } } 我得到了我正确的价值达4338 。 捕获StackOverflowError输出获取连线后,如下所示。 4336 4337 4338 // up to this point out put can understand 433943394339 // 4339 repeating thrice 434043404340 4341 434243424342 434343434343 4344 4345 434643464346 […]

为什么在抛出StackOverflowException时,.NET的行为如此糟糕?

我知道在.NET中的StackOverflowExceptions不能被捕获,取消他们的进程,并没有堆栈跟踪。 这在MSDN上正式logging。 不过,我想知道行为背后的技术(或其他)原因。 所有MSDN说是: 在以前版本的.NET Framework中,您的应用程序可能会捕获一个StackOverflowException对象(例如,从无限recursion中恢复)。 然而,这种做法目前是不鼓励的,因为需要大量额外的代码才能可靠地捕获堆栈溢出exception并继续执行程序。 这个“重要的附加代码”是什么? 这种行为是否有其他logging的原因? 即使我们不能抓住国有企业,为什么我们至less得不到一个堆栈跟踪呢? 几个同事,我只是沉没了几个小时,debugging生产StackOverflowException,这将需要几分钟的堆栈跟踪,所以我想知道是否有一个很好的理由,我的痛苦。

F#vs OCaml:堆栈溢出

最近我发现了一个关于Python程序员的F#的演示,在看完之后,决定自己实现一个解决“ant难题”的解决scheme。 有一只可以在平面网格上走动的ant。 ant可以一次向左,向右,向上或向下移动一个空间。 也就是说,从细胞(x,y),ant可以进入细胞(x + 1,y),(x-1,y),(x,y + 1)和(x,y-1)。 ant无法进入x和y坐标的数字之和大于25的点。 例如,点(59,79)是不可访问的,因为5 + 9 + 7 + 9 = 30,它大于25.问题是:如果ant在(1000,1000)开始时访问多less个点,包括(1000,1000)本身? 我首先在30行OCaml中实现了我的解决scheme,并试用了它: $ ocamlopt -unsafe -rectypes -inline 1000 -o puzzle ant.ml $ time ./puzzle Points: 148848 real 0m0.143s user 0m0.127s sys 0m0.013s 整洁,我的结果和leonardo在D和C ++中的实现一样 。 与leonardo的C ++实现相比,OCaml版本的运行速度比C ++慢大约2倍。 这是可以的,因为莱昂纳多使用队列来消除recursion。 然后我把代码翻译成F# …这是我得到的: Thanassis@HOME /g/Tmp/ant.fsharp $ /g/Program\ Files/FSharp-2.0.0.0/bin/fsc.exe ant.fs Microsoft […]