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

你可能感兴趣的:(学习C++之路)