调用“更新”后 XNA 游戏堆栈溢出错误

Posted

技术标签:

【中文标题】调用“更新”后 XNA 游戏堆栈溢出错误【英文标题】:XNA Game stack overflow error after 'update' called 【发布时间】:2012-08-08 01:28:30 【问题描述】:

大家好,

我一直在构建一个跨平台框架/抽象层,以利用适当平台上的 Mono 和 XNA 框架来定位 androidios 和 Windows Phone 7。我没有使用 ExEn、MonoGame 或类似的框架,尽管我从研究他们的方法中学到了很多东西。

框架的 XNA 部分扩展了 XNA Game 类,我很确定这就是问题所在。但是,我在追踪它时遇到了一些困难,对 XNA Game 类有更好了解的人可能会提供很大帮助。我不会发布该类的整个继承层次结构的代码,因为它会占用一些空间,但我会请求有关 XNA Game 类中问题的可能来源的信息,这可能会导致我发现我的错误.

我在运行测试游戏时收到堆栈溢出异常。完整的例外是:

An unhandled exception of type 'System.***Exception' occurred in Microsoft.Xna.Framework.Game.dll

为了追查罪魁祸首,我一直在向控制台输出一些简单的调试语句。我得到的输出是:

Started init.
Started linear load.
Loading a texture...
Finished loading a texture...
Finished linear load.
Finished init.
Begin run called.
Begin run ended successfully.
Started update.
Ended update.

Process is terminated due to ***Exception.

如您所见,它已成功完成更新,但未继续进行 BeginDraw 或 EndRun。我一直无法确定此时可能会发生哪些进程以导致堆栈溢出异常。

如果有人可以帮助确定此时可能发生的过程,那么无疑有助于找到问题的根源。如果您更愿意检查代码,我当然可以提供,但我会犹豫,因为我相信我可以通过更多信息来确定问题,并且理解问题所需的代码库可能非常大。

感谢您的时间和帮助,如果我能提供更多有用的信息,请告诉我。

【问题讨论】:

您能否检查异常的堆栈跟踪(或者将其粘贴到您的问题中)? 非常可耻,我忘记了我可以禁用“仅我的代码”功能并检查问题的根源。奇怪的是,它似乎在调用 OnActivated ad-infinitum。 【参考方案1】:

解决方案

事实证明 OnActivated 被重复调用是由于我的相当愚蠢的一步,显然,将事件处理方法与事件本身绑定,从而创建了一个无限循环的自切换。

谢谢

感谢 Illian Pinzon 提供的有用且显而易见的建议,它让我的大脑从 Android 开发导致的昏迷状态中解脱出来。

【讨论】:

以上是关于调用“更新”后 XNA 游戏堆栈溢出错误的主要内容,如果未能解决你的问题,请参考以下文章

分段错误和堆栈溢出有啥区别?

detours hooked CreateFile 函数触发堆栈溢出

如何解决递归调用中的堆栈溢出错误?

递归过程中的第一个过程调用发生堆栈溢出

Java 中的自调用函数中的堆栈溢出错误(岛数)

什么是堆栈溢出?