非洲蜗牛 2021-02-04 07:53 采纳率: 28.6%
浏览 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条回答 默认 最新

  • 502203305 2021-02-04 11:14
    关注

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上
  • ¥20 WPF 如何实现多语言,label 和cs(live Charts)中是否都能翻译
  • ¥15 STM32F103上电短路问题
  • ¥15 关于#单片机#的问题:以ATMEGA128或相近型号单片机为控制器设计直流电机调速的闭环控制系统(相关搜索:设计报告|软件设计|流程图)
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计