本文为 2024年2月工作生活总结。
研发编码
一些警告修正记录
这个月修正了个人所负责的工程警告,这些警告其实是前人的代码遗留的,我续写的代码,除printf函数的%d、%ld格式,都在写的过程中改了。
下面记录一些典型的警告及应对措施。
未使用的变量:
警告:未使用的变量'cur_num' [-Wunused-variable]
int cur_num = 0;
措施:删除变量。
变量赋值了,但未使用:
警告:variable listid set but not used [-Wunused-but-set-variable]
int listid = -1;
措施:删除变量,如果是调试用的,则在编译时加上参数-Wno-unused-but-set-variable
。
结构体地址赋值:
警告:格式 '%s' expects argument of type 'char*', but argument 4 has type 'fooInfo_t {aka fooInfo}' [-Wformat=]
snprintf(abc, sizeof(abc), "%s", foo[i]);
措施:该警告其实应该是笔误,但没有严重影响。该语句意在赋值结构体的第一个元素,而该元素地址和结构体地址相同,又有大小限定,所以不会有影响。加上该语句后还有结构体成员赋值的代码,因此更是笔误。
sftp下载证书错误
某国产化系统,使用curl实现sftp数据下载,报错:
error code : 60, error message : SSL peer certificate or SSH remote key was not OK
在初始化curl时,加上如下语句,不认证服务端证书:
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
程序可维护性的思考
过年期间,接了若干电话,均和数据上传有关,有的数据字段不符合数据库要求,如本不能为NULL的字段却没有值,有的是日期错误,如年月日字段写了20001351。不管何种问题都需要人工操作。其实方法之前和运维提到过,现在又重复了。对此问题,需考虑如何较方便修正,如程序自动判断出错的数据,将其拷贝到单独文件。如对外提供http接口,可临时修改参数而不需要重启容器,等等。有的已经落实到代码上,有的还未想到较好的方法。
单步调试
这个月连续有几个不同的疑难问题。运维在会上提出,领导过问,提到要掌握断点单步调试。这么些年,我的调试能力仅限于printf和看代码。有2个动态库工程,有1个是html+go+c++混合工程,有一个涉及网络连接服务器的多线程工程。要在eclipse里调试,还是有难度的。像网络客户端程序,虽然可以在ecplise将请求的返回值修改让程序走走下去,但不如直接联调好,我甚至为了调试,自己在本地实现对应的服务端。还有那个混合工程,因为网页上有自动补齐功能,输入不同参数十分方便,但要到ecplise里高度,也是较难的。但总有办法,比如将网页参数转换后,保存到文件中,需在eclipse中调试时,走单独的入口读取文件,再单步跟踪。对于大型复杂且不熟悉的工程,单步是有优势的。
生活记录
今年过年回家,妹妹妹夫一家子初二来家里,初三去表伯家,初四去二姨家,初五在家包粽子,初六上南宁,然后上班,月底大锤大妞上学,恢复日常生活两点一线、辅导作业,时不时加班的生活。
育儿记录
这个月回家过年,晚上7点多天黑下来,抬头就看到参宿了,冬季那几颗著名的星星都很亮,如天狼星,毕宿五,五车二,南河北河三。甚至还看到了闪闪的老人星,大锤继续吵着要买望远镜。在月底,终于买了一台,但天公不作美,南宁连着阴天雨天,无法看星星。