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

Gin Gin 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
这是源码

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)

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

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
Gin
其它技术问题 3,881 成员 9,044 内容