前段时间客户反映程序有频繁奔溃的问题,于是抽时间做内存泄露的优化。
终于费了九牛二虎之力使用vld解决了内存泄露的问题,而且windows下都测过了,可以正常运行,
但是部署到linux系统上的时候无缘无故出现段错误的问题
奔溃了一上午加帮个下午,试了各种方法,最后成功解决,特此记录一下
首先我的程序是基于qt的,之前没编译过debug版本的,编译debug的时候需要在后面加个-d参数
然后就是设置系统生成core dump文件
ulimit -c unlimited //取消系统限制
sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t //设置输出core的位置及格式
yum install gdb //没有gdb的话安装gdb
./程序名 //运行待奔溃程序,得到奔溃日志
gdb ./程序名 /tmp/coredump文件 // 进入gdb调试界面
输入run程序会运行到崩溃处停止
输入bt 查看奔溃前调用堆栈
我的程序是在CBaseSocket::OnWrite处出问题,我猜测可能是网络部分有问题,
后来我仔细查看了一下那儿,果然不出所料,就此,问题解决,世界又恢复了往日的平静
如果你在开发中遇到类似的问题,可以参考我的经验,或者求助我,毕竟这种问题对一个新手来说太难了