首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >静态分析能检测内存泄漏吗?

静态分析能检测内存泄漏吗?
EN

Stack Overflow用户
提问于 2016-05-09 15:13:15
回答 4查看 10.7K关注 0票数 11

我在很久以前就获得了我的ISTQB认证,我记得它有以下区别:

-static分析:对源代码执行,检测无法到达的代码,未分配的值等。

-dynamic分析:可以检测内存泄漏等,需要执行(分析)。

但是当我今天搜索时,我可以看到不同的站点和来源提到静态分析也能够检测到内存泄漏。

所以我想知道,静态分析真的能做到吗?如果是这样的话,那么动力分析的结果有什么不同呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-05-09 18:04:49

设计良好/实现良好的静态分析工具可以检测到某些代码必须存在漏洞的许多情况,只需分析代码即可。像Coverity/Prevent这样的工具做得很好。

这类工具还可以检测到许多可能存在漏洞的情况(图灵市的柏油坑无法确定地知道这些情况)。对于这个工具是否应该报告这些存在着巨大的争论,因为它们可能是假阳性,而假阳性是对程序员时间的浪费。更糟糕的是:如果一个程序员把时间浪费在几个错误的错误上,s/他经常会完全放弃使用这个工具,现在甚至连真正检测到的bug的价值也会丢失。

动态分析工具通常可以判断泄漏是否发生,目前它发生在运行时。(想象一个指向堆的指针保存在局部变量中,而局部变量超出了作用域)。(请参阅我们的CheckPointer工具中的动态分析工具,该工具可以检测运行时遇到的几乎每一个堆栈/堆分配/指针误用错误)。

票数 9
EN

Stack Overflow用户

发布于 2016-05-10 13:34:06

作为静态分析器的开发人员之一,我可以声明搜索内存泄漏的问题对于SCA来说是一个极其复杂、有时是不可能的任务。静态分析器在这个领域真的很弱,我们不应该对它们期望太高。动态分析器对于内存泄漏的搜索要强得多,如果有任务要查找它们,那么您应该考虑动态分析,而不是静态分析。

是的,静态分析器能够找到内存泄漏的简单情况。但实际上,当代码很复杂,内存在程序的不同部分中被释放/分配时,内存就会泄漏。因此,静态分析确实不是很有效。

票数 12
EN

Stack Overflow用户

发布于 2016-05-09 20:47:27

我很确定静态分析器能捕捉到:

代码语言:javascript
运行
复制
void MyFunction()
{
    char * leakable = new char[1000];
}

因此,你的问题的答案显然是“是的”。

一个更有趣的问题是,它能捕捉到更微妙的漏洞吗?如果它能够访问所涉及的所有源代码或方法的contract表示(即:如果注释说:调用方负责释放返回的对象“,那么静态分析器可能不会捕捉到它,但是如果用代码表示相同的概念(或者可以通过分析代码来获得),静态分析器可能会发现问题--有时。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37119336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档