问题标签 [dynamic-analysis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
36721 浏览

code-analysis - 什么是动态代码分析?

什么是动态代码分析?

它与静态代码分析有什么不同(即它可以捕捉到什么不能在静态中捕捉到)?

我听说过边界检查和内存分析——这些是什么?

使用动态分析还检查了哪些其他事项?

-亚当

0 投票
5 回答
658 浏览

java - 在 Java 中查找共享可变数据错误的工具

我有一个大型遗留系统需要维护。代码库到处都使用线程,这些线程共享大量可变数据。我知道,听起来很糟糕。无论如何,不​​要回答“从头开始重写整个应用程序”,否则我会投票给你 :-) 我曾尝试在代码库上运行一些静态分析工具,但似乎没有一个能捕捉到这种经常发生的情况在我们的源代码中:多个线程正在读取和写入根本没有标记为 volatile 或同步的变量。通常这发生在“runFlag”类型的变量上。在 Effective Java 2nd edition page 260 上就是一个例子:

这个例子永远不会在 Windows/Linux 上完成,并为 Sun JVM 提供了“-server”启动参数。那么,是否有任何(半)自动的方法来发现这些问题,还是我必须完全依赖代码审查?

0 投票
6 回答
8412 浏览

sql - 协助编写复杂 SQL 查询的最佳工具?

我经常发现自己花了很多时间来弄清楚为什么某些 SUM() 聚合在 SQL 查询中总结错误。如果我在添加 JOIN 时不小心,通常会出现此问题,导致重复值被求和等。如果我使用包含大量 JOIN、嵌套子查询、GROUP BY 等的大查询,调试起来会变得非常复杂。

我想知道是否存在一种工具,可以通过图形方式说明汇总、连接在一起的数据等方式,使构建和调试复杂查询变得更加容易。

我正在寻找的一个例子在http://www.imada.sdu.dk/~sorenh07/misc/datacentric-querytool.png

这当然只是一个早期的模型,我对任何与此相关的评论感兴趣。

0 投票
4 回答
10070 浏览

java - 有哪些有趣的、免费的、开源的 Java 动态分析工具?

我正在寻找一些有趣的动态分析器来使用和报告大学作业。工具应该是:

  • 开源(所以我可以向他们学习)
  • 免费(演讲和啤酒都一样,因为我希望能够分享结果,我很吝啬,分别)
  • 适用于 Java(源代码或字节码)

这包括但不限于性能分析器。他们可以执行任何类型的分析,只要它是动态的,例如代码覆盖率、多线程正确性。

产生的结果在某种程度上应该是有用的,但它们不一定是工业强度

类似的问题:

那么有哪些有趣的、免费的、开源的 Java 动态分析工具呢?

0 投票
3 回答
1296 浏览

c++ - 是否有任何 C++ 工具可以检测误用 static_cast、dynamic_cast 和 reinterpret_cast?

以下问题的答案描述了C++中static_castdynamic_cast和的推荐用法:reinterpret_cast

什么时候应该使用 static_cast、dynamic_cast、const_cast 和 reinterpret_cast?

你知道有什么工具可以用来检测这些演员阵容的滥用吗?像 PC-Lint 或 Coverity 静态分析这样的静态分析工具会这样做吗?

提示这个问题的特殊情况是不恰当地使用static_cast来向下转换指针,编译器不会警告。我想使用一种工具来检测这种情况,而不是假设开发人员永远不会犯这个错误。

0 投票
4 回答
390 浏览

java - 随时间绘制方法调用的工具

我正在寻找一种工具,它可以随着时间的推移为 java 应用程序绘制方法调用。也许是分析器或其他日志解析工具?

我知道我可以用 python 写一些东西,我会努力做到这一点。我只是希望不要重新发明轮子。

编辑:

我最终做的是编写一些 python 来解析我的日志并以 5 秒的间隔拍摄快照。然后,我使用谷歌文档和电子表格将我的数据可视化,并使用包含 2 列数据的图表:时间和频率。谷歌文档非常有用。使用“将图表移动到自己的工作表”以获得漂亮的全尺寸视图。当我清理一下我的python时,我会发布它。

这是我在评论中指定的方法的输出图

替代文字

0 投票
2 回答
2428 浏览

python - 动态二进制检测框架 PIN 的 Python 接口

我使用 Python 分析二进制文件。我一直在使用调试器进行动态分析(即运行应用程序并使用断点来获取运行时执行)。但是,如果我可以使用一些像PIN这样的二进制仪器框架,结果可以得到改善。PIN 是用 C++ 开发的,并作为封闭源代码(仅限 dll)提供。我们编写了一个叫做 PinTools 的东西来描述我们想要拦截的位置和内容。我想将 PIN 功能移植到 Python 中,以便继续使用 Python。我知道“ctypes”和 boost-python。

我的问题是:为了使用 PIN,我们编写了一个 pintool 并使用 Pin 和 pintool 运行我们的二进制可执行文件(就像使用 JIT 运行应用程序一样)。现在,我不知道是否可以使用 ctypes 等来导入 PIN 函数并使用此 python 代码动态分析二进制文件。您能否就如何进行此任务提供一些建议或指导。

因此,在 nut-n-shell 中,我想为 PIN 框架创建一个 Python 接口(包装器)。

0 投票
2 回答
666 浏览

java - 用于快速类型分析和变量类型分析的预定义算法

我正在尝试对 Java 源文件执行程序分析。是否有任何预定义的算法来执行变量类型分析和快速类型分析?

0 投票
2 回答
282 浏览

clojure - 哪些变量会影响 Clojure 函数?

如何以编程方式确定哪些 Var 可能会影响 Clojure 中定义的函数的结果?

考虑一下 Clojure 函数的定义:

这是 的函数x,也是*increment*(以及clojure.core/+(1)的函数;但我不太关心)。在为这个函数编写测试时,我想确保我控制所有相关的输入,所以我做了这样的事情:

(想象一下,这*increment*是一个配置值,有人可能会合理地更改;我不希望这个函数的测试在发生这种情况时需要更改。)

我的问题是:我如何编写一个断言,它的值(f 1)可以依赖于*increment*但不依赖于任何其他 Var?因为我希望有一天有人会重构一些代码并导致函数

并忽略更新测试,即使*additional-increment*为零,我也希望测试失败。

这当然是一个简化的例子——在一个大型系统中,可以有很多动态变量,并且可以通过一长串函数调用来引用它们。即使f调用引用 Var 的g调用,该解决方案也需要工作。h如果它不声称(with-out-str (prn "foo"))依赖于,那就太好了*out*,但这并不重要。如果被分析的代码调用eval或使用 Java 互操作,当然所有的赌注都没有了。

我可以想到三类解决方案:

  1. 从编译器获取信息

    我想编译器会扫描函数定义以获取必要的信息,因为如果我尝试引用一个不存在的 Var,它会抛出:

    请注意,这发生在编译时,无论有问题的代码是否会被执行。因此,编译器应该知道函数可能引用了哪些 Var,并且我希望能够访问该信息。

  2. 解析源代码并遍历语法树,并记录引用 Var 的时间

    因为代码就是数据等等。我想这意味着调用macroexpand和处理每个 Clojure 原语以及它们采用的每种语法。这看起来很像一个编译阶段,如果能够调用编译器的某些部分,或者以某种方式将我自己的钩子添加到编译器中,那就太好了。

  3. 检测 Var 机制,执行测试并查看哪些 Var 被访问

    不像其他方法那样完整(如果在我的测试未能执行的代码分支中使用 Var 怎么办?)但这就足够了。我想我需要重新定义def以产生类似于 Var 但以某种方式记录其访问的东西。


(1) 实际上,如果您重新绑定,该特定功能不会改变+;但是在 Clojure 1.2 中,您可以绕过该优化,(defn f [x] (+ x 0 *increment*))然后您就可以使用(binding [+ -] (f 3)). 在 Clojure 1.3 中,尝试重新绑定+会引发错误。

0 投票
4 回答
1387 浏览

c# - .Net/C# 是否有工具来捕获类之间的*运行时*依赖关系?

我可以为 .Net/C# 项目使用什么工具来捕获类之间的运行时依赖关系?我发现这个问题非常有用,但建议的工具会捕获静态依赖图。我只是想看看类的实例化图。

我正在使用 VS 2008(但如果需要可以安装其他版本)。

UPD:我的目标是这个。我有巨大的旧代码库。它有(例如)500 个类,但是因为 DB 驱动的工作流多年来发生了变化,现在只(例如)使用了 100 个类。这就是为什么静态依赖分析将难以消化的原因。