2013-03-31 187 views
0

我在条件语句中设置了一个断点,用于检查自定义数据类型的某个值。游戏将会中断,但是它的分界线完全超出了我的断点范围。观察变量表明,它第一次循环迭代时就会破坏,使得我的调试条件语句绝对无用。CodeBlocks断点忽略范围

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

您是否启用了任何优化? 'if'中的那些语句什么也不做,所以编译器可以在优化过程中丢弃它们。这意味着这些语句不会存在于实际的可执行文件中,因此您不能在它们上面放置断点。 –

+0

@JoachimPileborg是的,我认为这是问题所在。删除优化标志后,其表现正常。谢谢!如果您将评论更改为解决方案,我会将其标记为解决方案。 – KongMD

回答

1

if身体内部的代码并没有真正做任何事情,所以编译器可在优化通视它为"dead code"remove it从可执行。这意味着有问题的代码实际上并不存在于最终的可执行文件中,因此您不能在其中放置断点。

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