2016-10-31 13 views
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はツリー構造で、子供がいます。この関数は、どのノードが特定のコマンドを実行できるかを調べるために、ツリーを反復処理します。

+2

まず目で本当に良いと詳細な説明を見つけることができます

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

: 5ダンプespスタックフレーム
を調べるために、それは次のようにする必要がありますep:次のうちどれが当てはまるのでしょうか? a)ノードXの子(または、Xの子の子)はX自身です。 b)バグのあるコードの中には多数の入れ子の子が挿入されていますが、子どもは存在してはいけません。 c)データはOKであり、スタックは実際には小さすぎます。 – deviantfan

+1

Primeが疑う: 'command.action(* this、dt);'はこの関数を呼び出すか、 'this'は' mChild'の要素です。デバッガのコールスタックに沿って 'this'ポインタを見て、ノードツリーにループがあるかどうか確認してください。 – molbdnilo

+0

提供された情報に基づいてこの質問に答えることはできません。エラーを示す最小の実例を提供してください。最小限の作業例を作成すると、通常、問題の特定に役立ちます。 –

答えて

0

私は「スタックオーバーフロー例外をデバッグする方法は?」という質問に答えます。
1-バグを再現できますか?はい
2 - 先に行く場合は、あなたの例外
、4-は、(特に、()32ビットのためeipebp
のレジスタの内容を参照してくださいトリガー
、3- windbgの(またはollydbgまたはその他)を使用して、プロセスをオープン/取り付けあなたはこのlink

関連する問題