运行'堆栈溢出'错误

Chu*_*ckO 5 stack-overflow delphi

我有一个用Delphi W32编写的应用程序,它处于测试阶段.

在测试PC上,它会在使用几个小时后偶然发出"堆栈溢出"消息.

如何捕获错误并查找原因?

我可以增加堆栈大小吗?

fro*_*ogb 15

您应该在链接器选项中减少堆栈大小.然后在调试器下运行它,希望问题会出现,而不必等待两个小时.


mj2*_*008 13

得到madExcept它会告诉你在故障发生时到底发生了什么.你会看到完整的堆栈,特别是它正在逃跑的地方.

  • 哦,你考虑过无休止的递归吗?您的递归算法是否检查并在最大深度处引发异常? (3认同)

Toa*_*oad 6

我差点说:在调试器中运行它; ^)

我以前做的是在每个方法中添加一个进入和离开日志功能.通过适当的缩进,我可以在日志中跟踪调用路径.

当堆栈溢出发生时,它将真正在日志中可见,因为缩进级别应该通过屋顶

 void someMethod()
 {
      logMethodEnter("someMethod");

      ... do stuff...
      log("something")
      ... do stuff...

      logMethodLeave("someMethod");

 }
Run Code Online (Sandbox Code Playgroud)

记录器会跟踪当前的logdepth并记录这样的东西:

 >someMethod
   something
 <someMethod
Run Code Online (Sandbox Code Playgroud)