我正在制作游戏,一切都很好,直到我添加了一些功能。我在这个功能上工作了大约一个月,不幸的是我没有足够的智慧来测试代码的较小部分,所以我添加了很多代码,现在我收到了这个错误。
Unhandled exception at 0x77555098 (ntdll.dll) in SFML setup.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x006D2FA8).
我的代码很大,检查每个功能都很困难。在调试器调用堆栈中,此特定函数重复多次。
void SceneNode::onCommand(const Command &command, sf::Time dt)
{
if (command.category.at(getCategory()))
command.action(*this, dt);
for(const Ptr& child : mChild)
{
child->onCommand(command, dt);
}
}
SceneNode是树结构,并且有一些子节点。此函数尝试遍历树,以查看哪些节点可以执行特定命令。
答案 0 :(得分:0)
我回答问题:“如何调试堆栈溢出异常?”
1- Bug可重现?如果是,请继续
2-使用windbg(或ollydbg或任何其他)附加/打开您的过程
3-触发您的例外
4-查看寄存器的内容(特别是(对于32位)eip
,ebp
)
5-转储esp
以检查堆栈框架
应该是这样的:
{ Local Var -> Saved EBP -> Saved EIP -> Params -> Address of Exception Handler }
您可以在link
找到一个非常好的详细解释