写点什么

一份编程错误列表强调静态代码分析有其必要性

  • 2012-12-19
  • 本文字数:761 字

    阅读完需:约 2 分钟

Program Verification Systems 公司(针对 C 和 C++ 的静态代码分析工具 PVS-Studio 就是该公司的产品)发布了一份编程错误列表,有些错误是从Chromium、TortoiseSVN、Apache HTTP Server 和MySQL 等流行的开源项目中发现的。

这份列表维护的编码错误有150 多类,有的是严重的逻辑错误,有的是性能相关的问题,还有一些危害并不是很大。

下面是选自该列表的一些错误类型,示例代码都来自真实项目。

V502 ——或许‘?:’运算符的工作方式和想象中并不相同。该运算符的优先级比很多运算符都要低。

MongoDB:

复制代码
string sysInfo() {
....
stringstream ss;
....
ss << (sizeof(char *) == 8) ? " 64bit" : " 32bit";
....
}

这是一个很好的例子。这段代码打印的是 0 或 1,而非“32bit”或“64bit”。

V511 ——在如下表达式中,sizeof 运算符返回的是指针的大小,而非数组的大小。

Chromium:

复制代码
uint8 salt_[LINK_SALT_LENGTH];
VisitedLinkMaster::TableBuilder::TableBuilder(
VisitedLinkMaster* master,
const uint8 salt[LINK_SALT_LENGTH])
: master_(master),
success_(true) {
fingerprints_.reserve(4096);
memcpy(salt_, salt, sizeof(salt));
}

“salt”对象就是一个指针。方括号中的值 LINK_SALT_LENGTH 向程序员表明,他们正在使用的是一个包含 LINK_SALT_LENGTH 个元素的数组。但传递给函数的并不是数组——只是个指针。因此,表达式 sizeof(salt) 返回的值是 4 或 8(32 位或者 64 位系统上指针的大小)。

到目前为止,这个列表上列出的、出现于各种开源项目的错误,很多可能已经修复。因为任何程序员都难免出错,所以使用一个或多个静态代码分析工具处理一下源代码是个不错的建议。Wikipedia 上有一个页面,列出了很多针对不同语言的静态代码分析工具。

参考英文原文 An Errors List Underscores the Need for Static Code Analysis

2012-12-19 08:282770
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 144.9 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

OceanBase 源码解读(八):事务日志的提交和回放

OceanBase 数据库

oceanbase 源码解读

聊聊数仓中TPCD-DS&TPC-H与查询性能的那些事儿

华为云开发者联盟

编辑器 GaussDB(DWS) TPCD-DS TPC-H 查询性能

教你两分钟做出一个精美好用的404页面

源字节1号

前端开发 后端开发 网页开发

运维审计系统是堡垒机么?跟堡垒机有啥区别?

行云管家

运维 堡垒机 运维审计系统

Centos7安装Nginx

云原生

nginx centos 部署

小程序容器技术,App热更新与敏捷开发新方案

Speedoooo

敏捷开发 APP开发 热更新 小程序容器 动态更新

成都大运会“数智竞技邀请赛”启动 开悟平台为全球青年提供竞技舞台

科技热闻

敏捷实践|好的用户故事怎么写?

LigaAI

用户故事 敏捷实践

一周热点回顾|虎符交易所上线多链合一;俄央行称加强监控加密资产等P2P交易

区块链前沿News

区块链 虎符交易所

小程序容器轻松打造轻应用生态平台

Speedoooo

APP开发 小程序容器 轻应用 快应用 超级app

【网络安全】网络安全的重要性你知道吗?

行云管家

网络安全

centos7.6安装MySQL5.7采坑指南

云原生

MySQL 数据库 sql centos

母婴后浪品牌频出,各个细分市场有哪些发展潜力?

易观分析

母婴

恒源云(GpuShare)_MaskFormer:语义分割可以不全是像素级分类

恒源云

语义分割 像素分割 MaskFormer

深入浅出事务的本质,附 OceanBase 事务解析14问!

OceanBase 数据库

oceanbase OceanBase 社区版

从 SVN 迁移到极狐GitLab

极狐GitLab

svn 迁移 极狐GitLab

在线JSON转HTML,TABLE表格工具

入门小站

工具

收藏很久的资源整合网站,一个网站一个世界

小炮

3. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识bombardierdate

MASA技术团队

C# .net 测试 压测 测试工具

Linux之uniq命令

入门小站

Linux

如何进行高效的版本管理,版本管理的方法

阿里云云效

云计算 阿里云 项目管理 云原生 版本管理

“StarRocks 极客营” 重磅来袭,和技术大牛一起推开数据库梦想之门!

StarRocks

数据库 大数据 StarRocks

Git 如何回退代码

秋天

VuePress 博客之 SEO 优化(五)添加 JSON-LD 数据

冴羽

Vue 前端 vuepress SEO 博客搭建

在线HTML压缩格式化工具

入门小站

工具

TDesign 更新周报(2022年3月第3周)

TDesign

电脑就是我的安全感|ONES 人物

万事ONES

招聘 软件工程师

大咖说|试衣到家 CEO:我们卖的不是衣服,是服务

大咖说

阿里巴巴 科技 时尚产业 试衣到家

数字化原住民|ONES 人物

万事ONES

软件 招聘 软件工程师

集结创新力量,2022航天宏图&华为云杯PIE软件开发者大赛正式开启

科技热闻

什么技术,让浩鲸科技拿下中国移动大奖?

鲸品堂

中国移动

一份编程错误列表强调静态代码分析有其必要性_语言 & 开发_Abel Avram_InfoQ精选文章