首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >STATUS_STACK_OVERFLOW应用程序中的应用程序崩溃是否意味着堆栈溢出发生在本机代码中?

STATUS_STACK_OVERFLOW应用程序中的应用程序崩溃是否意味着堆栈溢出发生在本机代码中?
EN

Stack Overflow用户
提问于 2018-10-25 01:54:32
回答 1查看 3.3K关注 0票数 0

我在c00000fd中得到了一个带有执行代码ntdll.dll (STATUS_STACK_OVERFLOW)的应用程序。

这是否意味着在本机代码中的某个地方,在我的托管代码之外存在堆栈溢出?因为对于托管代码,我们有System.StackOverflowException。但在我的例子中没有,也没有堆栈跟踪可以提供线索。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-25 02:12:18

你再也抓不到System.StackOverflowException

从.Net 2.0开始,只能在以下情况下捕捉到它们。

  • CLR是在主机特别允许处理StackOverflow异常的托管环境中运行的。
  • 堆栈溢出异常是由用户代码引发的,而不是由于实际的堆栈溢出情况(参考)

虽然错误说它发生在ntdll.dll中,但它很可能是由代码引起的。

我的第一步是在生产中添加或打开最高的调试日志记录,这样您就可以缩小发生的地方和情况。

其次,我将开始调试(附加调试器)并仔细检查该方法类,直到您找到它为止。很可能是因为一些递归,这是我第一个开始寻找的地方。

附加资源和参考资料

C#捕获堆栈溢出异常

如何在我的应用程序中找到StackOverflowException的来源

如何在没有源代码链接的情况下调试System.StackOverflowException?

如何防止和/或处理StackOverflowException?

如何在.NET中调试堆栈溢出异常

故障排除异常: System.StackOverflowException

StackOverflowException类

在.NET Framework1.0和1.1中,您可以捕获一个StackOverflowException对象(例如,从无限递归中恢复)。从.NET Framework2.0开始,您无法捕获带有try/catch块的StackOverflowException对象,默认情况下相应的进程将终止。因此,您应该编写代码来检测和防止堆栈溢出。例如,如果应用程序依赖于递归,则使用计数器或状态条件终止递归循环。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52980232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档