CodeBlocks断点忽略范围

时间:2013-03-31 14:29:18

标签: c++ debugging gdb codeblocks breakpoints

我在条件语句中设置了一个断点,用于检查自定义数据类型的某个值。游戏将会破裂,但它突破的线路完全超出了断点的范围。监视变量显示它只是在第一次循环迭代时中断,使得我的调试条件语句绝对无用。

在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;
        }
    }

1 个答案:

答案 0 :(得分:1)

if正文中的代码并没有真正做任何事情,因此编译器可以在优化过程中从可执行文件中将其视为"dead code"remove it。这意味着有问题的代码实际上并不存在于最终的可执行文件中,因此您无法在那里放置断点。

关闭优化(通常在调试时总是很好),它应该可以正常工作。