问题标签 [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.
java - 在 Java 中查找共享可变数据错误的工具
我有一个大型遗留系统需要维护。代码库到处都使用线程,这些线程共享大量可变数据。我知道,听起来很糟糕。无论如何,不要回答“从头开始重写整个应用程序”,否则我会投票给你 :-) 我曾尝试在代码库上运行一些静态分析工具,但似乎没有一个能捕捉到这种经常发生的情况在我们的源代码中:多个线程正在读取和写入根本没有标记为 volatile 或同步的变量。通常这发生在“runFlag”类型的变量上。在 Effective Java 2nd edition page 260 上就是一个例子:
这个例子永远不会在 Windows/Linux 上完成,并为 Sun JVM 提供了“-server”启动参数。那么,是否有任何(半)自动的方法来发现这些问题,还是我必须完全依赖代码审查?
sql - 协助编写复杂 SQL 查询的最佳工具?
我经常发现自己花了很多时间来弄清楚为什么某些 SUM() 聚合在 SQL 查询中总结错误。如果我在添加 JOIN 时不小心,通常会出现此问题,导致重复值被求和等。如果我使用包含大量 JOIN、嵌套子查询、GROUP BY 等的大查询,调试起来会变得非常复杂。
我想知道是否存在一种工具,可以通过图形方式说明汇总、连接在一起的数据等方式,使构建和调试复杂查询变得更加容易。
我正在寻找的一个例子在http://www.imada.sdu.dk/~sorenh07/misc/datacentric-querytool.png
这当然只是一个早期的模型,我对任何与此相关的评论感兴趣。
java - 有哪些有趣的、免费的、开源的 Java 动态分析工具?
我正在寻找一些有趣的动态分析器来使用和报告大学作业。工具应该是:
- 开源(所以我可以向他们学习)
- 免费(演讲和啤酒都一样,因为我希望能够分享结果,我很吝啬,分别)
- 适用于 Java(源代码或字节码)
这包括但不限于性能分析器。他们可以执行任何类型的分析,只要它是动态的,例如代码覆盖率、多线程正确性。
产生的结果在某种程度上应该是有用的,但它们不一定是工业强度。
类似的问题:
那么有哪些有趣的、免费的、开源的 Java 动态分析工具呢?
c++ - 是否有任何 C++ 工具可以检测误用 static_cast、dynamic_cast 和 reinterpret_cast?
以下问题的答案描述了C++中static_cast
、dynamic_cast
和的推荐用法:reinterpret_cast
什么时候应该使用 static_cast、dynamic_cast、const_cast 和 reinterpret_cast?
你知道有什么工具可以用来检测这些演员阵容的滥用吗?像 PC-Lint 或 Coverity 静态分析这样的静态分析工具会这样做吗?
提示这个问题的特殊情况是不恰当地使用static_cast
来向下转换指针,编译器不会警告。我想使用一种工具来检测这种情况,而不是假设开发人员永远不会犯这个错误。
java - 随时间绘制方法调用的工具
我正在寻找一种工具,它可以随着时间的推移为 java 应用程序绘制方法调用。也许是分析器或其他日志解析工具?
我知道我可以用 python 写一些东西,我会努力做到这一点。我只是希望不要重新发明轮子。
编辑:
我最终做的是编写一些 python 来解析我的日志并以 5 秒的间隔拍摄快照。然后,我使用谷歌文档和电子表格将我的数据可视化,并使用包含 2 列数据的图表:时间和频率。谷歌文档非常有用。使用“将图表移动到自己的工作表”以获得漂亮的全尺寸视图。当我清理一下我的python时,我会发布它。
这是我在评论中指定的方法的输出图
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 接口(包装器)。
java - 用于快速类型分析和变量类型分析的预定义算法
我正在尝试对 Java 源文件执行程序分析。是否有任何预定义的算法来执行变量类型分析和快速类型分析?
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 互操作,当然所有的赌注都没有了。
我可以想到三类解决方案:
从编译器获取信息
我想编译器会扫描函数定义以获取必要的信息,因为如果我尝试引用一个不存在的 Var,它会抛出:
请注意,这发生在编译时,无论有问题的代码是否会被执行。因此,编译器应该知道函数可能引用了哪些 Var,并且我希望能够访问该信息。
解析源代码并遍历语法树,并记录引用 Var 的时间
因为代码就是数据等等。我想这意味着调用
macroexpand
和处理每个 Clojure 原语以及它们采用的每种语法。这看起来很像一个编译阶段,如果能够调用编译器的某些部分,或者以某种方式将我自己的钩子添加到编译器中,那就太好了。检测 Var 机制,执行测试并查看哪些 Var 被访问
不像其他方法那样完整(如果在我的测试未能执行的代码分支中使用 Var 怎么办?)但这就足够了。我想我需要重新定义
def
以产生类似于 Var 但以某种方式记录其访问的东西。
(1) 实际上,如果您重新绑定,该特定功能不会改变+
;但是在 Clojure 1.2 中,您可以绕过该优化,(defn f [x] (+ x 0 *increment*))
然后您就可以使用(binding [+ -] (f 3))
. 在 Clojure 1.3 中,尝试重新绑定+
会引发错误。
c# - .Net/C# 是否有工具来捕获类之间的*运行时*依赖关系?
我可以为 .Net/C# 项目使用什么工具来捕获类之间的运行时依赖关系?我发现这个问题非常有用,但建议的工具会捕获静态依赖图。我只是想看看类的实例化图。
我正在使用 VS 2008(但如果需要可以安装其他版本)。
UPD:我的目标是这个。我有巨大的旧代码库。它有(例如)500 个类,但是因为 DB 驱动的工作流多年来发生了变化,现在只(例如)使用了 100 个类。这就是为什么静态依赖分析将难以消化的原因。