C语言中常见的编译报错及调试方法

1、头文件报错

预处理阶段出现   通常为头文件路径错误或文件名写错导致的。(以hello.c这个文件为例)

报错时出现的提示:

hello.c:5:19: fatal error: inc/a.h: 没有那个文件或目录
compilation terminated.

2、语法错误 

在编译阶段出现 ,通常为标点符号或中文问题 。

报错时出现的提示:

语法错误:

未定义变量r:

C语言中常见的编译报错及调试方法_第1张图片

数据类型错误,注意检查 

hello.c: In function ‘main’:
hello.c:10:2: error: expected ‘;’ before ‘func’
  func();
  ^

中文符号:

hello.c: In function ‘main’:
hello.c:9:2: error: stray ‘\357’ in program
  printf("PI=%.2f\n", PI);
  ^
hello.c:9:2: error: stray ‘\274’ in program
hello.c:9:2: error: stray ‘\233’ in program
hello.c:10:2: error: expected ‘;’ before ‘func’
  func();
  ^

 3、未定义标识符

3. 未定义标识符    变量/函数没有定义或声明就使用  

报错时出现的提示:

hello.c: In function ‘main’:
hello.c:12:19: error: ‘pelpe’ undeclared (first use in this function)
  printf("%.2d\n", pelpe);
                   ^
hello.c:12:19: note: each undeclared identifier is reported only once for each function it appears in
 

 4、归档错误 及连接错误

 归档错误 及连接错误引用了其他文件或库中的函数 而没有声明 或 函数名字错误 
/tmp/cclYp5VM.o:在函数‘main’中:
hello.c:(.text+0x42):对‘func’未定义的引用
collect2: error: ld returned 1 exit status

5、逻辑错误 

 bug  程序可以运行 但 没有达到预期效果甚至出现错误

解决方法:对于出现的错误第一条到第四条,可以对症下药,vim 进入文件针对不同的错误,查找报错的原因,并且改正。针对第五个出现bug的现象,有以下两种可以尝试解决的方法。

 1、 printf()打印法,可以对一些位置的变量进行值输出,进而查找出bug

2、GDB 调试器: 软件调试工具,字符界面调试功能 ;

使用:

1. 编译时添加-g 选择  附加调试信息    (示例文件 shuzu.c)
    gcc shuzu.c -g -o gdb.out

 -g使用gbd调试                  -o :将文件名改为gbd。out

2.     使用gdb运行调试程序 
    gdb gdb.out

C语言中常见的编译报错及调试方法_第2张图片
 

 进入调试后通过以下的指令进行调试:

gdb 命令   
    l  查看程序源码  
    设置断点    断点: 程序 运行到这里就会暂停 
    b 行号  
    info b  查看所有的断点 
    
    运行代码
    r 
    查看程序中变量的值 
    
    单步运行:   一次执行一行C代码  
    (gdb) n     运行一行
    (gdb) s      若这一行是函数调用,s则进入函数
    恢复程序运行 
    (gdb) c
    
    删除断点 
    del  1   删除断点1 
    
    quit  退出gdb  

你可能感兴趣的:(c语言,开发语言)