GCC 11 的静态分析功能将得到增强
在去年的 GCC 10 中,David Malcolm 为其实现了一个新选项 -fanalyzer —— 一个静态分析器,可以在编译时通过静态分析识别各种问题,比如安全漏洞 CVE-2020-1967。而根据 David Malcolm 最新的博客内容,该功能在 GCC 11 中将得到增强。
在这次更新中,该静态分析器有两个部分将被重写,即跟踪程序状态相关和内存泄漏检测及不确定性。
在 GCC 10 中,状态跟踪组件存在很多崩溃错误,其中一个大问题是使用唯一 ID 来跟踪符号值和区域,目前修改为使用唯一对象(单例)来表示符号值和区域。另一个大问题是之前的实现中,符号值和区域被用来表示内存区域的符号访问路径到符号值的映射,目前修改为内存中位偏移群集的映射。
GCC 10 中的内存泄漏检测存在很多误报,并且分析器的确切行为因调用而异,由于哈希算法,迭代的顺序将隐式取决于精确的指针值。指针值可能由于地址空间布局随机化而不同,从而导致不同的结果。该部分内容已经重写,新的内存泄漏检测将更少误报,并且分析器的行为在每次运行时都可重现。
同时,该静态分析功能新增了 4 个 -Wanalyzer 前缀的警告,这些警告都对应 C 和 C++ 中已经存在的 -W 警告,但是实现并不相同。
除上述改动以外,静态分析器还有两个正在开发中的新功能:标记 API 和 以 HTML 方式输出结果。前者可以检测泄漏和双重释放,后者是对输出报告可视化的优化,比如 Double-free bug、Signal handler issue、Memory leak。
目前 GCC 11 已经进入最后开发阶段,预计于下个季度发布,并且 -fanalyzer 现在仅支持 C,对 C++ 的支持计划于 GCC 12 中实现。
相关阅读

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Shotcut 21.01.29 发布,跨平台视频编辑器
Shotcut 21.01.29 已经发布。 Shotcut是一款免费、开源、跨平台的视频编辑器,适用于 Windows、Mac 和 Linux。主要功能包括支持多种格式、本地时间线编辑且无需导入、支持输入和预览监视的Blackmagic Design、支持 4k 分辨率。 部分更新内容 添加了对 AV1 解码和编码的支持 在 “Properties > Convert to Edit-friendly” 对话框中添加了高级模式 在“时间轴”和“关键帧”菜单中添加了“使用高性能波形”菜单(默认启用) 在当前打开的播放列表项的缩略图旁添加了红色轮廓 添加了视频过滤 在 “Properties > Video” 添加了色彩空间和色彩转移 改进了视频轨道融合和一些视频过滤器的多线程性能 提高了快进和快退的播放速度 更改了关键帧插值离散 将时间轴,过滤器和关键帧转换为 Qt Quick Controls 2 API 将 MLT 升级到 6.24.0 将 Qt 升级到适用于 Linux 和 Windows 的 5.15.2 版本和适用于 macOS 的 5.12.10 版本 详细内容...
- 下一篇
每日一博 | 用 Rust 实现一个猜谜游戏
在深入探索Rust语法的细枝末节之前,先通过一个麻雀虽小但五脏俱全的小项目来整体把握Rust,这样可以避免迷失在细节的海洋中。我们可能会通过这个小项目一下子接触到很多新概念,但不必惊慌,我们只需浅尝辄止对这些概念有个印象即可。 《TRPL》(Rustaceans对《The Rust Programming Language》的爱称)中就给出了一个经典的猜谜游戏的例子,我们一起来学习它。 猜谜游戏:程序将会随机生成一个 1 到 100 之间的随机整数。接着它会请玩家猜一个数并输入,然后提示猜测是大了还是小了。如果猜对了,它会打印祝贺信息并退出。 Rust如何管理项目 并不是所有的代码都像hello_world.rs一样,一个文件就可以搞定。一个项目往往具有复杂的代码,我们需要一种机制来管理这种复杂性,将一个项目切分成若干小部分,每个部分再进行切分,层层抽象,直到达到人脑可以处理的规模。每种编程语言都有这样的机制,例如Java的package机制,Rust也不例外。 Rust用了两个概念来管理项目:一个是crate(项目),一个是mod(模块)。模块是用于在crate内部进行分层和封装的机...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程