首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么小弟我在调试某些c程序的时候,GDB会跳过一些本来应该执行的语句

2012-03-28 
为什么我在调试某些c程序的时候,GDB会跳过一些本来应该执行的语句?这是源码void schedule(void){int i (

为什么我在调试某些c程序的时候,GDB会跳过一些本来应该执行的语句?
这是源码

void schedule(void)

{

  int i = (last_task_nr == 0) ? last_task_nr = 1 : last_task_nr;//这里就没有执行

 

  i++;

  do

  {

  i = (i >= NR_TASKS) ? 1 : i;

 

  if (task[i] == NULL) //这里也没有

  continue;

  if (TASK_RUNNING == task[i]->state)

  {

  last_task_nr = i;

  break;

  }

 

  }while (++i != last_task_nr+1);

 

  if (i == last_task_nr+1)

  last_task_nr = 0;

 

  switch_to(last_task_nr);

}

 

这是在gdb中调试的情景

schedule () at schedule.c:31
31 int i = (last_task_nr == 0) ? last_task_nr = 1 : last_task_nr;
(gdb)  
33 i++;
(gdb)  
46 }while (++i != last_task_nr+1);
(gdb)  
36 i = (i >= NR_TASKS) ? 1 : i;
(gdb)  
38 if (task[i] == NULL)
(gdb)  
46 }while (++i != last_task_nr+1);
(gdb) p i 《== 这里也显示不了i的值
$1 = <value optimized out>
(gdb) n
36 i = (i >= NR_TASKS) ? 1 : i;
(gdb)  
38 if (task[i] == NULL)
(gdb)  
46 }while (++i != last_task_nr+1);
(gdb)  

我在网上查,说可能是注释的问题,我把所有的注释都去掉,结果还是这样?究竟该怎么解决啊????


[解决办法]
跳过语句只可能是:
1 代码被优化;
2 代码行数被修改,调试器没及时更新导致显示位置错误;
3 代码编译的目标文件过老,需要重新编译;
4 极小的概率是调试器出了问题
[解决办法]
编译时别开优化。
用 -O0

热点排行