1.C语言程序错误
1).语法错误
(1).错误(error):语法错误,无法生成对应的二进制文件
(2).告警(Warnning):语法警告,语法有可能会出现问题,不影响二进制文件的生成,程序运行可能会出错
2).逻辑错误
程序运行结果和预期不符
(1).打印法
在可能出错的位置加入打印,查看对应的结果是否与预期一致,如果一致在后续的代码中继续加入打印,直到不满预期为止,则完成对错误的定位
(2).gdb调试
根据问题单步调试,直到找到错误为止
五.GDB调试工具<——详细说明
1.编译时加入-g选项,允许gdb调试
gdb name.c -g -o filename
2.调试生成的二进制程序
gdb filename
2.内存问题调试
1).内存越界(内存溢出)
现象:代码会出现偶现性、必现性的BUG,程序代码不稳定,数据被莫名其妙的修改
问题原因:指针的越界访问,特别是字符串越界访问
示例:
- strcpy、strcat、strcmp、sprintf这些都是有越界风险的函数
- 推荐使用strncpy、strncat、strncmp、snprintf替换之前有越界风险的函数
strncpy(dst,src,sizeof(dst)-1);
替换
strcpy(dst,src);
2).段错误调试
现象:程序运行后报错 Segmentation fault(core dumped)
问题原因:错误使用指针,访问非法空间
解决方法:
- 打印法,加入打印,前一句能打印,后一句无法打印,证明中间代码出现问题
- gdb调试段错误:
(1).编译代码时加入 -g选项
(2).程序代码段错误时会产生core文件
(3).修改core配置文件(改一次),并使用命令允许生成core文件
ulimit -c unlimited
(4).使用gdb调试段错误
gdb filename core



3).内存泄漏
现象:长时间运行代码,剩余内存空间越来越少
问题原因:内存泄漏,申请的空间没有被释放,所以不断有空间被申请,造成可用空间越来越少
解决方法:
valgrind
valgrind --tool=memcheck --check-leak=full ./a.out
4).安装valgrind工具
(1).让虚拟机能够上网
打开"虚拟机" -> "设置" -> "网络适配器" -> 选择"NAT模式" -> 点击"确定"


(2).设置Ubuntu的IP地址为自动获取IP地址:
1.打开网卡配置文件
sudo vim /etc/network/interfaces
修改文件内容为:
auto lo
iface lo inet loopback
auto ens33
iface ens33 inet dhcp
2.重启虚拟机
sudo shutdown -r now
(3).配置apt-get工具集
1.点击"Ubuntu Software Center"
2.右键图标选择"Software & Updates"
3.源选择 aliyun
4.点击choose
5.输入密码1
6.点close(不能点revert)
7.终端输入:
sudo apt-get autoclean //清除旧源
sudo apt-get update //更新新源
sudo apt-get install -f //重建软件源依赖关系
(4).ping 8.8.8.8
查看是否连上网




981

被折叠的 条评论
为什么被折叠?



