c++程序常见core处理--2020-09-07

首先遇到core文件,一般会采用gdb +  进程执行命令 + core名称(遇到core文件带单引号的 可以用 \ 转义下)。

定位到core的代码行数,一般分两种情况:

1、代码是自己业务代码行。

        这种情况下一般情况比较容易解决,大部分为:

        1、对空指针操作;不管别的模块是否判断指针,对指针操作前一定要先判空。

        2、数组溢出;要注意取值范围,常见的是字符串的问题。

        3、类析构时出现;当进程是通过调用共享库编译出的库时,如果某个库未及时编译,会出现这种问题,全量重编可以解决,也可以分析是否有依赖的文件修改而没有及时编译相应的库。

        4、单线程跑的时候没问题,多线程跑会偶发core。这种情况一般是存在多线程同时操作线程不安全的变量,这种时候需要加锁来对该变量处理。比如多个线程往一个vector中添加成员导致core的问题。

        5、使用迭代器操作序列容器时,在循环内对容器操作,比如在对vector对象循环时还添加成员。

2、代码是其他的代码。

        1、如果是基础模块的代码,比如stl底层的vector头文件,这种情况可以去看下网上关于该开源代码的使用规范,限于能力与经历有限,目前遇到的问题都是自己业务代码的错误,还未亲身遇到因底层文件缺陷导致core的问题。看到有关的文章中,有人遇到不同linux版本内核中对某入参变量的限制不同,传入的字符数组只会取固定长度,导致返回后再操作时报错的。

        2、其他开发团队的代码,这种情况一般是找对应开发团队来帮忙看下,毕竟没有源码要分析问题难于上青山。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值