gcc/g++开启-Werror
项目代码是老古董了,编译时警告比较多,达到上千个,一个是qt版本的升级,老版本的函数进行了更新,就产生了过期的警告。开启-Werror
后,强迫把产生警告的代码修改掉,修改代码的过程中,也学到了一些知识。
开启这个选项有很多好处,让可能存在的bug消除掉。比如头文件包含的警告,如果没有包含函数对应的头文件,链接时可能找错,在不同平台上程序的行为表现可能不同,因此警告信息还是不能忽略。
主要的警告有以下几项:
- 未使用的参数。通过函数体内在参数前添加
(void)
,qt中使用Q_UNUSED
宏,两者是一样的。 - 使用过时的函数。改成新版本的函数。
QObject
在拷贝构造函数中没有显式初始化。显式调用构造函数。- 不同数据类型的变量比较。改成相同类型,或者进行强制类型转换。这种情况在数值的边界情况下是比较容易出现bug的。
串口通信干扰
仪器中有个氙灯闪光灯,开启闪光的时候,对核心板的HMI板接收数据存在干扰,干扰期间会一直收到7f
,数据位是7,应该和这个有关系。闪光开始和结束后的1秒内,这期间存在干扰。这样就造成了软件产生了通信报警,后来修改了软件的报警策略,连续多次通信出错后,再进行报警。同时后续可能会对结构上添加屏蔽层。大概率原因是氙灯板更新了。
《程序设计实践》
这本书中有2章是对解决bug的描写。有个观点让我印象比较深,就是聪明的程序员能够从每个发现的bug中学到知识,这样就不断加强了技能,而一般水平的程序员仅仅是为了解决bug,从来不会学到教训。大概是这个意思,具体的语言记不清楚了。
产品迭代中的软件管理
有个项目,机型是支持多种机型,研发是一个机型一个机型的进行研发,而软件只用一套代码,这样造成的情况是,如果机型一,机型二已经发布了,现在正在研发机型三,那前面机型需要变更时,也要把变更内容同步到正在开发的机型三代码中。同时,机型三新增的需求也会存在于前面的机型中,每次测试也需要测试所有支持的机型。这种做法感觉只是方便了代码开发,对于整个项目的管理,似乎有些混乱。
gdb使用心得
调试器是观察程序行为的利器,发现程序与预期不符,需要掌握常用法,而单纯的学习是掌握不了的,需要在实践使用中,碰到了什么问题,然后去学习gdb怎么使用这项功能,在实践中学习。像教员说的:学习是学习,实践也是学习。这是比较快速掌握gdb的方法。还有一个原因是,gdb太强大了,功能太多了,这也是一个方面。