最近的bug列表总结(C++)

时间:2022-09-20 17:22:32

最近写了一大段代码,抽象得厉害,容易绕进去,因为写单测的代价很大(借口),所以很多问题到联调的是否才发现。

而且花费了很大的经历才查出来,主要问题有如下几个问题

1. 变量未初始化

具体来说,就是指针之类的,这个是之前遇到的比较多,当前已经很少了,拿出来说是因为这次用上了一个栈上单例(常见的单例,一般是new一个对象)的实现。

因为对其用法理解不深,导致为初始化对象。

2. 绑定端口失败

绑定端口失败后,主线程退出了,然后在启动的线程就core掉了。从core文件分析以为是线程有什么问题,但后来不断地删除代码,最终定位是port绑定失败,换一个端口就好了。

如果早点去看日志,就不必绕这么大的弯了!!

3. 自动完成

写代码时,用到了vim的自动完成功能,导致函数一直返回-1, 示例代码如下

int Class::init(int output, int input)
{
// arg check
if (output_)
{
return -1;
}
.....
}

这种情况下,编译器完全没有错误提示,只能靠自己小心了。。

4.继承类调用基类同名函数

基本的实例代码如下

class Base {
public:
int init(int output, int input);
};
class Class : public Base {
int init(int output, int input);
}; int Class::init(int output, int input)
{
// arg check
if (output_)
{
return -1;
} // return Base::init(output, input)
return init(output, intput);
}

继承类同名参数列表调用基类参数列表,本来只是想调用基类的init函数,但由于override了,所以还是会继续调用Class::init(),最终会因为递归栈深度core掉。

此时需要显示的指定调用的为基类函数.

5. protobuf 通信问题

protobuf

写的程序是server-client模式,cs间通信协议是用protobuf定义的。client 将protobuf封装好,通过tcp发送给server后,server端报解析失败。

这个错误以前也遇到过,问题的根源是,项目中protobuf并不是以同一个模块存在的,而是client和server中均有一个独立的模块。双方需要对协议。

后来查找出的问题是server端protobuf 添加了一个required字段,没有通知client端,导致解析错误

同样这个问题,如果早点看日志的话,调试时间会少很多。因为我们一般在专门的log中查找,并没有去标准输入和输出的日志中去查找错误。而protobuf

解析错误具体的日志信息是放在了标准输入输出中。

6. 分号问题

其实是一个很傻的问题,在将语句改写为if条件时引入的,具体代码如下

get_return_int(zzz);
->
if (get_return_int(zzz)<);
{
printf("negtive something\n");
return -;
}
return 0

在if后多了个;导致总是返回-1

7. 溢出

相关代码如下。

int64_t get_file_size(const char* filename)

int file_size = get_file_size("data/westfly")
if (file_size < )
{
printf ("load errro\n");
return -;
}
return ;

加载一份文件,之前小于2G,用int可以保存大小。某一天大于2g了,int就小于0了,导致说加载出错。

8. opt版本core,debug版本不core

现象debug版本中,运行得很好,打开-O2选项,进行opt发布版,运行就core掉了。

根据core文件, info thread

发现线程只有50多个,正常预期应该是150左右。明显某些线程没启动起来。

于是怀疑是主线程粗暴的退出了,导致其它线程访问出错。

添加相关日志,确认了失败的具体位置,经过定位,发现是某个基类函数最后

没有返回值。但外层经过了判断,导致主线程退出了。

9. 单线程不core,多线程core

拷贝之前的代码,没有多想,之前的代码中是支持多线程的,但线上居然只配置了一个(坑啊!!)

然后,我这个需求需要其多个来处理,导致core掉。

找了很久,一个个线程的看状态,发现某个资源的mutex被其它线程持有(core文件找问题也需要看机缘啊),

于是分析得到可能是共享变量的问题。

最终定位到从某个全局的资源池获取资源的时候,没有加锁。添加锁后完美解决。

10. protobuf 返回值误用

static bool ParseFromString(const string & input, Message * output);

if(ParseFromString() < 0)

{

}

默认为返回值为int类型,导致出错返回false时,也显示成功。

11. 状态机问题

12. 默认参数

程序中用到一个hashmap,插入时value的接口为

insert(key, value, flag=0)

关键是最后一个默认参数,表示当key存在时的处理,

当flag = 0 时,如果key存在,则忽略

当flag=1时,如果key存在,则覆盖。

在程序调用时,直接insert了,采取默认参数0.

而程序reload接口与load 共同调用一个函数。

导致reload时,新value不生效。

13. shell转码问题

为了加密系统,使用了base64编解码,用的是私有的码表,生成了url,通过curl 请求时反解url时,总是缺一些信息,

几次定位才发现url中包含$符号,shell在curl时,将$后的字符转义为变量了,导致为空,将双引号改成单引号就好了。

14. 程序边界问题

某天,接到报警,线上的server down掉了,经过定位,发现是返回值未加判断的问题。

其实,还是接上面一个场景,我以为经过base64加密后,应该就高枕无忧了,在base64反解码的时候,就没有判断是否解码成功,结果

对于某些请求base64反解码的返回值为负值,导致往string中assign时,core掉了。

应该是我们编的url太过显眼,然后被人想方法破解,结果程序就core掉了。还是考虑不周全啊。

最近的bug列表总结(C++)的更多相关文章

  1. 本周MySQL官方verified&sol;open的bug列表(11月15日至11月21日)

    本周MySQL verified的bug列表(11月15日至11月21日) 1. Bug #70923    Replication failure on multi-statement INSERT ...

  2. 本周MySQL官方verified&sol;open的bug列表(11月8日至11月14日)

    本周MySQL verified的bug列表(11月8日至11月14日) 1. Bug #70859-DWITH_EXAMPLE_STORAGE_ENGINE=1 is ignored     URL ...

  3. 本周MySQL官方verified的bug列表(11月1日至11月7日)

    本周MySQL verified的bug列表(11月1日至11月7日) 1.Bug #70839JSON_VALID allows to have two elements with the same ...

  4. 写了一个Windows服务,通过C&num;模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我

    写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我 1.HttpUtil工具类,用于模拟用户登录以及爬取网页: using System; using ...

  5. oracle已知会导致错误结果的bug列表&lpar;Bug Issues Known to cause Wrong Results&rpar;

    LAST UPDATE:     1 Dec 15, 2016 APPLIES TO:     1 2 3 4 Oracle Database - Enterprise Edition - Versi ...

  6. Bug列表

    1.Space is not allowed after parameter prefix ': 这个问题主要原因是Hibernate不能识别SQL语句中的":="导致的网上有其他 ...

  7. ie6&comma;ie7&comma;ie8 css bug兼容解决方法

    IE浏览器以不支持大量的css 属性出名,同时也因其支持的css属性中存在大量bug. 这里收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决,也希 ...

  8. ie6&comma;ie7&comma;ie8 css bug兼容解决记录

    ie6,ie7,ie8 css bug兼容解决记录 转载自:ie6,ie7,ie8 css bug兼容解决记录 - 前端开发 断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面 ...

  9. CSDN中的Bug

    简述 在用CSDN的过程中,发现了许许多多的Bug.之前没有做记录,直接反馈给客服了,有时没图说得不太清楚,现在不都追求有图有真相么O(∩_∩)O~,所以在此记录一下. 作为程序员的一份子,Bug对我 ...

随机推荐

  1. python中各种结构的复杂度

    list The Average Case assumes parameters generated uniformly at random. Internally, a list is repres ...

  2. 剑指Offer 跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   解题思路: f(n)=f(n-1)+f(n-2); f(1)=1,f(2)=2;   AC代码 ...

  3. Android ListView滑动过程中图片显示重复错乱闪烁问题解决

    最新内容建议直接访问原文:Android ListView滑动过程中图片显示重复错乱闪烁问题解决 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及L ...

  4. 转!!java中的内部类总结

    java内部类 内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液 ...

  5. ExtJs目录说明

    Ext开发包目录结构说明builds目录为ExtJS压缩后的代码docs目录为ExtJS的文档examples目录中是官方的演示示例locale是多国语言的资源文件, 其中ext - lang - z ...

  6. imagemagick &sol;tmp&sol;magick-xxxxxxxx

    问题 imagemagick在某种场景下会狂写/tmp目录,文件名形如magick-xxxxxxxx, ls -lh查看这些文件达到几百G, du -sh查看则只有几十M 被这个问题折磨了许久,大晚上 ...

  7. python 变量命名规则

    变量命名: 1.语法:   (下划线或字母)+(任意数目的字母.数字或下划线) 变量名必须以下划线或字母开头,而后面接任意数目的字母.数字或下划线. 区分大小写: SPAM和spam不同 禁止使用保留 ...

  8. CodeForces 528D Fuzzy Search 多项式 FFT

    原文链接http://www.cnblogs.com/zhouzhendong/p/8782849.html 题目传送门 - CodeForces 528D 题意 给你两个串$A,B(|A|\geq| ...

  9. 把MacBook里的电影导入到iPad

    主要是用iTunes -> 文件 -> 添加到资料库,然后选择影片 -> 同步 -> 应用.在iPad上点开视频APP即可. 怎样才能把mac里的电影放到ipad里_百度知道 ...

  10. java 进销存 库存管理 销售报表 商户管理 springmvc SSM crm 项目

    系统介绍: 1.系统采用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC浏览器使用) 2.springmvc +spring4.3.7+ mybaits3.3  SSM ...