50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

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

关注

评论

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

10分钟写一个tidb-ai机器人帮你解答tidb问题

TiDB 社区干货传送门

新版本/特性解读

TiKV Raft Store 内存管理的原理与实现丨TiKV 源码解读(二十三)

TiDB 社区干货传送门

企业数字化转型:你的企业处于哪个发展阶段?

积木链小链

数字化转型 数字化 数字化平台

“观测先锋 · 2024 可观测平台创新应用案例大赛“评审团亮相,奖项权益再升级!

博睿数据

TiDB Vector 本地部署体验

TiDB 社区干货传送门

8.x 实践 TiDB Cloud TiDB Vector

ORN Ventures获得5,000万美元A轮融资

财见

e&宣布2024年Q3收益,合并收入增长10%,达到144亿迪拉姆

财见

为什么要开发海外电商代购系统?

科普小能手

系统开发 电商系统 海外代购系统 代购系统 代购商城系统

上海HR+AI智慧人才港启动,中国人力资本发展大会点亮数字化转型之路

财见

TiDB 集群组件间开启 TLS(双向认证

TiDB 社区干货传送门

7.x 实践

探讨Java深搜算法的学习笔记

威哥爱编程

Java 算法 DFS

管理者应该具备的几点认知

老张

团队管理 技术管理 职场晋升

HarmonyOS 5.0应用开发——用户文件操作

高心星

鸿蒙 HarmonyOS 鸿蒙5.0 HarmonyOS NEXT

Merge-region 原理及常见问题

TiDB 社区干货传送门

故障排查/诊断

冲一下深信服,好像有点简单?

王中阳Go

Go 面试

博睿数据获评2024中国智能运维领域“最具商业合作价值企业”

博睿数据

Java如何实现企业微信审批流程

威哥爱编程

Java 微信 企业微信开发

PME算法基础及其Python实现

代码忍者

突破 RAG 局限,KAG 专业领域知识服务框架正式开源!

可信AI进展

TiDB数据库出现性能问题,如何利用数据库性能诊断工具DBdoctor一分钟诊断!

TiDB 社区干货传送门

性能调优 实践案例 管理与运维 安装 & 部署 应用适配

资源利用率提高30%,揭秘华为云Serverless高效、高密度调度优化原理

华为云开发者联盟

资源调度 #Serverless #云原生 华为云FunctionGraph

Emeritus硅谷AI深度研学之旅圆满落幕,探索AI前沿投资洞察!

科技汇

Pandabuy案例分享:微店商品详情数据接口对接反向海淘的成功实践

tbapi

淘宝代购集运系统 Pandabuy 反向海淘系统

软件测试学习笔记丨Flask操作数据库-数据库和表的管理

测试人

软件测试

TiDB br日志备份PermissionDenied

TiDB 社区干货传送门

实践案例 备份 & 恢复

知乎 PB 级数据:超大规模TiDB集群管控实践

TiDB 社区干货传送门

实践案例 集群管理 数据库架构设计 HTAP 场景实践

Rust 在 Android 的编程实践——技术驱动的车云一体化解决方案探索

Greptime 格睿科技

android rust 时序数据库 车云

华测检测拟投资常州红海公司,布局电动自行车检测热门增长赛道

财见

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