0

カスタム データ型の特定の値をチェックする条件ステートメント内にブレークポイントを設定しました。ゲームは中断しますが、中断する行は完全に私のブレークポイントの範囲外です。変数を監視すると、ループが最初に繰り返されたときにブレークするだけで、デバッグ条件ステートメントがまったく役に立たなくなることがわかります。

Visual Studio では、デバッガーはスコープを尊重し、条件ステートメント内にブレークポイントを配置すると、その条件が true と評価された場合にのみゲームが停止します。これが CodeBlocks の GDB デバッガーに当てはまらないのはなぜですか? WindowsでGDBを使用しているからですか?コードは次のとおりです。

for(int j = 0 ; j < r->components[i].size() ; j++)
    {
        itype_id type = r->components[i][j].type;
        int req = r->components[i][j].count;

        //DEBUGGING ONLY!!!!!!!!!
        if(type == itm_coffee_raw)
        {
            int pleaseStop = 0;
            if(pleaseStop == 0) //BREAKPOINT IS ON THIS LINE
                bool dontstoptillyougetenough = true;
        }

        if (itypes[type]->count_by_charges() && req > 0) //GAME BREAKS HERE
        {
            if (crafting_inv.has_charges(type, req))
            {
                has_comp = true;
                break;
            }
        }
        else if (crafting_inv.has_amount(type, abs(req)))
        {
            has_comp = true;
            break;
        }
    }
4

1 に答える 1

1

本体内のコードifは実際には何もしないため、コンパイラはそれを「デッド コード」と見なし、最適化パスで実行可能ファイルから削除することができます。これは、問題のコードが最終的な実行可能ファイルに実際には存在しないことを意味するため、そこにブレークポイントを配置することはできません。

最適化をオフにすると (通常、デバッグ時には常に有効です)、動作するはずです。

于 2013-03-31T15:26:26.257 に答える