如何调试堆栈溢出异常?

时间:2016-10-31 13:09:20

标签: c++ debugging stack-overflow

我正在制作游戏,一切都很好,直到我添加了一些功能。我在这个功能上工作了大约一个月,不幸的是我没有足够的智慧来测试代码的较小部分,所以我添加了很多代码,现在我收到了这个错误。

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是树结构,并且有一些子节点。此函数尝试遍历树,以查看哪些节点可以执行特定命令。

1 个答案:

答案 0 :(得分:0)

我回答问题:“如何调试堆栈溢出异常?” 1- Bug可重现?如果是,请继续 2-使用windbg(或ollydbg或任何其他)附加/打开您的过程 3-触发您的例外 4-查看寄存器的内容(特别是(对于32位)eipebp
5-转储esp以检查堆栈框架
应该是这样的:

{ Local Var -> Saved EBP -> Saved EIP -> Params -> Address of Exception Handler }

您可以在link

找到一个非常好的详细解释