QCon 全球软件开发大会倒计时2个月!讲师已确认60%+ >>> 了解详情
写点什么

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

  • 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:282408
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

华为云助力企业引领数字化时代

YG科技

CloudQuery x 达梦,国产数据库正当时

BinTools图尔兹

数据库 数据库管理 数据库安全 达梦 兼容适配

Sermant:无代理服务网格架构解析及无门槛玩转插件开发

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 DTSE Tech Talk

oracle dblink mysql查询text无法显示问题

百度搜索:蓝易云

MySQL oracle Linux text DBLINK

使用Flink完成流数据统计 | 京东云技术团队

京东科技开发者

大数据 flink stream 数据统计

Redis 也支持全文搜索 了?这也太强了

越长大越悲伤

redis Jedis redisearch

浅谈SQL优化小技巧 | 京东云技术团队

京东科技开发者

MySQL 数据库 sql 性能优化

Blackmagic Fusion Studio 18 mac v18.6.4正式激活版

影影绰绰一往直前

解锁数字化时代的软件包管理利器—华为云CodeArts Artifact.docx

YG科技

大数据离在线混部资源调度的演进和选型

KubeData

大数据 云原生 云原生大数据

如何将在线教育小程序一键生成App

Geek_2305a8

安卓设备解锁工具 FonesGo Android Unlocker激活中文版

胖墩儿不胖y

Mac软件 安卓设备解锁工具

轻松建网站,一键部署,华为云不止省时还省心

YG科技

文件和文件夹比较的专业工具:VisualDiffer简单实用

影影绰绰一往直前

拓扑排序实现循环依赖判断 | 京东云技术团队

京东科技开发者

后端 排序算法 循环依赖 拓扑排序

Wireshark中的http协议包分析

小齐写代码

华为云 CodeArts Artifact:开启企业管理新模式

YG科技

Premiere Pro 2024 mac v24.1中文激活版

影影绰绰一往直前

Nacos 配置中心源码 | 京东物流技术团队

京东科技开发者

源码 nacos 源码剖析 配置中心

华为云耀云服务器L实例,数字化竞争的制胜法宝

YG科技

软件测试/人工智能丨逻辑运算符

测试人

人工智能 软件测试

docker通过dockerfile安装sftp教程。

百度搜索:蓝易云

Linux 运维 Dockerfile 云服务器 sftp

零基础也能搞定文案生成应用,半小时包教包会!「大模型摇摇乐」硬核教程来啦!

飞桨PaddlePaddle

人工智能 代码 零基础 开发教程 文案生成

K8s容器debug高级技巧

SEAL安全

容器 Kubernetes 集群

昇腾AI开发者创享日·广州站成功举办 四大仪式激发人工智能产业创新活力

彭飞

软件测试/人工智能丨关系运算符

测试人

人工智能 软件测试

每日一题:LeetCode-129. 求根节点到叶节点数字之和

半亩房顶

面试 算法 LeetCode 二叉树 DFS

华为云CodeArts Artifact:数字化时代软件包管理的领航者

YG科技

HashData:大数据时代的“追光者”

HashData

Fusion Studio 18 v18.6.4完美兼容破解版 附Fusion Studio激活补丁

Rose

mac视频后期特效处理 Fusion Studio 18下载 Fusion Studio激活秘钥 Blackmagic Fusion Studio

文件夹和文件比较工具 VisualDiffer免激活最新版

mac大玩家j

Mac软件 对比软件 文件夹对比工具

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