内存常见问题调试方法

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

查看是否连上网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

you-_ling

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值