非洲蜗牛 2021-02-04 07:53 采纳率: 25%
浏览 24

Linux C的gdb调试问题

我在使用Ubuntu的GDB调试一段C语言程序,程序如下:

#include<stdio.h>

int c[3]={0},d[3]={0},n;
int v1=0,f1=0,p1=0;
int v2=0,f2=0,p2=0;

void judge(char m,char n)
{
   if((m=='J'&&n=='B')||(m=='B'&&n=='C')||(m=='C'&&n=='J'))
   {
     v1++;
     f2++;
     if(m=='J')c[0]++;
     if(m=='B')c[1]++;
     if(m=='C')c[2]++;
   }
   else if(m==n)
   {
      p1++;p2++;
   }
   else
   {
      f1++;
      v2++;
      if(n=='J')d[0]++;
      if(n=='B')d[1]++;
      if(n=='C')d[2]++;
   }
   return;
}

void max(int a,int b,int c)
{
   if(a>b&&a>c)printf("J");
   else if(b>a&&b>c)printf("B");
   else if(c>a&&c>b)printf("C");
   else if(a==b||b>c)printf("B");
   else if(a==c||c>b)printf("C");
   else if(b==c||b>a)printf("B");
}

void find()
{
   max(c[0],c[1],c[2]);
   printf(" ");
   max(d[0],d[1],d[2]);
   printf("\n");
   return;
}

int main()
{
   scanf("%d",&n);
   getchar();
   char s1,s2;
   for(int i=0;i<n;i++)
   {
      scanf("%c %c",&s1,&s2);
      getchar();
      judge(s1,s2); 
   }

   printf("%d %d %d\n",v1,p1,f1);
   printf("%d %d %d\n",v2,p2,f2);
   find();      
   
   return 0;
}

在GDB 上调试的时候,对main函数中的两个char变量s1、s2设置观察,结果在调试的时候出现了这个问题:

但是程序本身的运行没有问题

请问哪位大佬能解释一下呢?多谢啦

  • 写回答

1条回答 默认 最新

  • 「已注销」 2021-02-04 11:14
    关注

    频繁使用的变量会被编译器优化掉。建议到最上层看他的值。

    引用什么的也可能被编译器优化掉。调试就显示 optimized.

    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀