3
私はいくつかの機能を追加するまで、ゲームに取り組んでいます。私はこの機能について約1ヶ月働いていましたが、残念ながらコードの小さな部分をテストするほど賢明ではなかったので、多くのコードを追加しました。スタックオーバーフローの例外をデバッグする方法はありますか?
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はツリー構造で、子供がいます。この関数は、どのノードが特定のコマンドを実行できるかを調べるために、ツリーを反復処理します。
まず目で本当に良いと詳細な説明を見つけることができます
: 5ダンプ
esp
スタックフレームを調べるために、それは次のようにする必要がありますep:次のうちどれが当てはまるのでしょうか? a)ノードXの子(または、Xの子の子)はX自身です。 b)バグのあるコードの中には多数の入れ子の子が挿入されていますが、子どもは存在してはいけません。 c)データはOKであり、スタックは実際には小さすぎます。 – deviantfan
Primeが疑う: 'command.action(* this、dt);'はこの関数を呼び出すか、 'this'は' mChild'の要素です。デバッガのコールスタックに沿って 'this'ポインタを見て、ノードツリーにループがあるかどうか確認してください。 – molbdnilo
提供された情報に基づいてこの質問に答えることはできません。エラーを示す最小の実例を提供してください。最小限の作業例を作成すると、通常、問題の特定に役立ちます。 –