非洲蜗牛 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 本地测试网站127.0.0.1 已拒绝连接,如何解决?(标签-ubuntu)
  • ¥50 Qt在release捕获异常并跟踪堆栈(有Demo,跑一下环境再回答)
  • ¥30 python,LLM 文本提炼
  • ¥15 关于将inet引入的相关问题
  • ¥15 关于一个倒计时的操作和显示设计
  • ¥15 提问STK的问题,哪位航天领域的同学会啊
  • ¥15 苹果系统的mac m1芯片的笔记本使用ce修改器使用不了
  • ¥15 单相逆变的电压电流双闭环中进行低通滤波PID算法改进
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 如何卸载arcgis 10.1 data reviewer for desktop