OPAL-关于使用 CHA 算法查找摘要 Class 中定义的方法调用
OPAL-Regarding Finding Calledges of methods defined in Abstract Class using CHA algorithm
这是一个与使用 CHA 为 Java 字节码构造调用图的算法相关的问题。
由于抽象 classes 中的方法没有具体的方法实现,因此向此类方法添加调用边缘可能会产生误导。
以 junit-4.12.jar
为例。 runFailed
已在 junit.runner.BaseTestRunner
中定义,它是一个抽象 class。此外,方法 getTest
中有对 runFailed
的调用,该方法也在 junit.runner.BaseTestRunner
中定义
而在"Assumption Hierarchy for a CHA Call Graph Construction Algorithm"(Jason&Atanas)中,据说
"given a call site x.m(), where the declared type of x is C, the
possible runtime type of x must be a non-abstract subtype of C."
据我考虑,不从junit.runner.BaseTestRunner getTest
到junit.runner.BaseTestRunner runFailed
添加一个call edge(Calledge1),从[=17添加一个call edge(Calledge2)更合理=] 到 junit/textui/TestRunner runFailed
因为 TestRunner 扩展了 BaseTestRunner.
而在运行 测试代码得到CallGraph.calledByStatistics() 的结果之后,只找到了Calledge1。缺少 Calledge2。
有没有人可以帮我确认一下?
提前谢谢你。
此致,
蒋
我发现 OPAL 提供了两种调用图视图。第二个不会将 "library-call" 边添加到调用边中。
在CallGraph.calledByStatistics()
绑定在调用站点 (PC) 与 caller.method 之间
例如:在“INVOKEVIRTUAL(junit.runner.BaseTestRunner{ void runFailed(java.lang.String) })”和
junit/runner/BaseTestRunner.public junit.framework.Test getTest(java.lang.String)
在CallGraph.callsStatistics()
绑定在 subtype.method 到 caller.method 之间
例如:
在“junit/textui/TestRunner.protected void runFailed(java.lang.String)”和“junit/runner/BaseTestRunner.public junit.framework.Test getTest(java.lang.String)”
这是一个与使用 CHA 为 Java 字节码构造调用图的算法相关的问题。
由于抽象 classes 中的方法没有具体的方法实现,因此向此类方法添加调用边缘可能会产生误导。
以 junit-4.12.jar
为例。 runFailed
已在 junit.runner.BaseTestRunner
中定义,它是一个抽象 class。此外,方法 getTest
中有对 runFailed
的调用,该方法也在 junit.runner.BaseTestRunner
而在"Assumption Hierarchy for a CHA Call Graph Construction Algorithm"(Jason&Atanas)中,据说
"given a call site x.m(), where the declared type of x is C, the possible runtime type of x must be a non-abstract subtype of C."
据我考虑,不从junit.runner.BaseTestRunner getTest
到junit.runner.BaseTestRunner runFailed
添加一个call edge(Calledge1),从[=17添加一个call edge(Calledge2)更合理=] 到 junit/textui/TestRunner runFailed
因为 TestRunner 扩展了 BaseTestRunner.
而在运行 测试代码得到CallGraph.calledByStatistics() 的结果之后,只找到了Calledge1。缺少 Calledge2。
有没有人可以帮我确认一下? 提前谢谢你。
此致,
蒋
我发现 OPAL 提供了两种调用图视图。第二个不会将 "library-call" 边添加到调用边中。
在CallGraph.calledByStatistics()
绑定在调用站点 (PC) 与 caller.method 之间 例如:在“INVOKEVIRTUAL(junit.runner.BaseTestRunner{ void runFailed(java.lang.String) })”和 junit/runner/BaseTestRunner.public junit.framework.Test getTest(java.lang.String)
在CallGraph.callsStatistics()
绑定在 subtype.method 到 caller.method 之间 例如: 在“junit/textui/TestRunner.protected void runFailed(java.lang.String)”和“junit/runner/BaseTestRunner.public junit.framework.Test getTest(java.lang.String)”