首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是动态代码分析?

什么是动态代码分析?
EN

Stack Overflow用户
提问于 2008-09-08 15:23:46
回答 4查看 36.7K关注 0票数 25

什么是动态代码分析?

它与Static Code Analysis有什么不同(例如,它可以捕获哪些在静态模式下无法捕获的内容)?

我听说过边界检查和内存分析--它们是什么?

使用动态分析还检查了哪些其他内容?

-Adam

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-09-08 15:47:06

简单地说,静态分析是基于源代码收集信息,而动态分析是基于系统执行,通常使用插装。

动态分析的优势

  • 能够检测在静态分析中无法检测到的依赖项。例如:动态依赖使用反射,依赖注入,polymorphism.
  • Can使用真实输入数据收集时态information.
  • Deals。在静态分析期间,很难知道哪些文件将作为输入传递、哪些网络请求将到来、哪些用户将单击等。

动态分析的缺点

  • 可能会对application.
  • Cannot的性能产生负面影响,因为它的运行是基于用户交互或自动测试的,因此保证了源代码的完全覆盖。

资源

市场上有很多动态分析工具,其中最臭名昭著的就是调试器。另一方面,它仍然是一个学术研究领域。有许多研究人员在研究如何使用动态分析来更好地理解软件系统。有一个专门针对dependency analysis.的年度研讨会

票数 32
EN

Stack Overflow用户

发布于 2008-09-08 15:36:03

基本上,您通过检测代码来分析正在运行的软件(动态),而不是在没有运行(静态)的情况下只分析软件。另请参阅此JavaOne presentation comparing the twoValgrind是一个用于C的示例动态分析工具。您也可以使用CoberturaEMMA等代码覆盖率工具进行Java分析。

来自维基百科的definition of dynamic program analysis

动态程序分析是对在真实或虚拟处理器上执行由该软件构建的程序而执行的计算机软件的分析(不执行程序而执行的分析称为静态代码分析)。动态程序分析工具可能需要加载特殊库,甚至需要重新编译程序代码。

票数 5
EN

Stack Overflow用户

发布于 2011-03-11 01:40:02

您要求对“边界检查和内存分析”问题进行很好的解释。

我们的Memory Safety Check工具用于在运行时监视应用程序的内存访问错误(缓冲区溢出、数组下标错误、错误指针、分配/释放错误)。该链接包含详细的解释,并附有示例。此SO answer显示了两个具有指向死堆栈帧的指针的程序,以及CheckPointer如何检测和报告源代码中的错误点

一个更简短的例子:C(和C++)臭名昭著地不检查对数组的访问,以查看访问是否在数组的边界内。好处:设计良好的程序在生产模式下不需要支付这样的检查成本。缺点:有buggy的程序可能会接触到数组之外的东西,这会导致很难理解的行为;因此,buggy程序很难调试。

像内存安全检查器这样的动态插装工具所做的是将一些元数据与每个指针(例如,指针“指向”的对象的类型,如果它是数组,则数组界限)相关联,然后在运行时检查任何经由指向数组的指针的访问,是否违反了数组界限。该工具修改原始程序以收集其生成位置的元数据(例如,在进入声明数组的作用域时,或者作为malloc操作的结果,等等)。并在每次数组引用时修改程序(写为xy,其中x或y是数组指针,值是某种整数类型,类似于*(x+y)!)来检查访问权限。现在,如果程序运行并执行越界访问,检查将捕获错误,并在可以检测到错误的第一个位置报告错误。[如果你仔细想想,你会意识到元数据收集和检查的工具必须非常聪明,才能处理像C这样的语言可能具有的所有变体情况。实际上很难完全做到这一点)。

好消息是,现在这样的访问被提前报告,这样更容易发现问题和修复程序。这样的工具不打算用于生产;在开发和测试期间使用,以帮助验证错误的存在。如果没有发现错误,则执行正常编译并运行程序,而不进行检查。

这是一个非常好的动态分析工具的例子:测试发生在运行时。

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

https://stackoverflow.com/questions/49937

复制
相关文章

相似问题

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