写点什么

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

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

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

关注

评论

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

设备资产管理系统解决方案

低代码小观

资产管理 CRM系统 企业设备管理 设备巡检管理系统 企业管理软件

百度可观测系列 | 如何构建亿级指标的高可用 TSDB 存储集群?

百度开发者中心

Kubernetes官方java客户端之四:内部应用

程序员欣宸

Kubernetes client 4月月更

恒源云(Gpushare)_没有你想要的镜像?技巧大放送5!

恒源云

镜像仓库 显卡、gpu

架构标准TOGAF实践最重要的三件事

博文视点Broadview

We are learning by contributing!访 StarRocks Committer 周康、冯浩桉

StarRocks

数据库 开发者社区 StarRocks

功能解读|快速上手 OceanBase 数据迁移服务

OceanBase 数据库

oceanbase OceanBase 开源

恒源云(Gpushare)_如何查看显卡占用的情况?技巧大放送2!

恒源云

算法 GPU服务器 显卡

恒源云(Gpushare)_JupyterLab/TensorBoard使用问题?技巧大放送4!

恒源云

人工智能 深度学习 PyTorch

“远见者”特斯拉AI主管Karpathy|深度学习崛起十年

OneFlow

人工智能 深度学习 计算机视觉 特斯拉 openai

产品知识在线培训的解决方案

小炮

企业知识管理

狗尾巴的故事—数智时代的第一性原理|科创人·数智未来私董会

科创人

2022华为软件精英挑战赛复赛名单公布,快来看看都有哪些优秀赛队晋级

科技热闻

高效使用Java构建工具,Maven篇|云效工程师指北

阿里云云效

云计算 maven 阿里云 java 并发 构建工具

开发者手册之如何成为 OceanBase Contributor

OceanBase 数据库

oceanbase OceanBase 开源 OceanBase 社区版

车载小程序快马加鞭突围车联网生态系统

FinClip

提升 Hybrid 体验:饿了么双十一 PHA 框架技术实践

阿里巴巴终端技术

App 用户体验 Hybrid PHA

ICDE 2022|Apache ShardingSphere:一个功能全面和可插拔的数据分片平台

SphereEx

数据库 ShardingSphere 论文 SphereEx

重塑企业数字化能力,端点科技重磅发布Erda2.0

科技热闻

Kubernetes官方java客户端之三:外部应用

程序员欣宸

Kubernetes java client

恒源云(Gpushare)_如何防止训练不中断?技巧大放送1!

恒源云

算法 服务器 训练

直播预告 | 如何在有限数据下实现资讯类网站海量信息自动分类

百度开发者中心

2022首场MASA技术团队黑客松大赛完美落幕!精彩集锦

MASA技术团队

C# .net 微软

云效制品仓库 Packages,不限容量免费用

阿里云云效

云计算 maven 阿里云 npm 制品仓库

TiFlash 开源了

PingCAP

【Zeekr_Tech】初谈我们共同的目标 NPDS + Agile

Zeekr_Tech

人工智能 敏捷开发 智能驾驶

科创人·知乎CTO李大海:技术服务内容、商业化依赖内容,曾被「呵呵」难到挠头

科创人

衡石BI产品预置明道云数据连接器

明道云

【直播回顾】OpenHarmony 知识赋能第四期第四课——音频驱动开发

Anna

OpenHarmony

恒源云(Gpushare)_如何安装包/pip加速等?技巧大放送3!

恒源云

安装 pip Ubuntu apt

打通产销对接,构建新型数智化农副产品供应链

数商云

产业互联网 数字化

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