gpt4 book ai didi

java - Soot:soot.jimple.JimpleBody 无法转换为 soot.dava.DavaBody

转载 作者:行者123 更新时间:2023-12-02 01:44:39 25 4
gpt4 key购买 nike

我运行了以下代码来获取 .class 文件中的异常处理程序:

public void getException(SootMethod method){
DavaBody db = (DavaBody) method.retrieveActiveBody();
IterableSet excepFacts = db.get_ExceptionFacts();
Iterator<ExceptionNode> it = excepFacts.iterator();
while(it.hasNext()){
ExceptionNode en = it.next();
...
}
}

运行上面的代码后出现错误:

Exception in thread "main" java.lang.ClassCastException: 
soot.jimple.JimpleBody cannot be cast to soot.dava.DavaBody

方法method.retrieveActiveBody()返回Body类型,而不是JimpleBody,那么为什么会发生这个错误呢?

最佳答案

documentationpublic BodyretrieveActiveBody() 是:

Returns the active body if present, else constructs an active body and returns that.

让我们看看 Body 类:

public abstract class Body
extends AbstractHost
implements Serializable

所以它是 Abstract 类,并且根据您的异常(exception),它返回 JimpleBodyBody 的子类。

如果RabbitAnimal,并且Wolf也是Animal,则Rabbit不是

您可以这样编辑代码:

if (method.retrieveActiveBody() instanceof JimpleBody) {

} else if (method.retrieveActiveBody() instanceof DavaBody) {

} else if (method.retrieveActiveBody() instanceof BafBody) {

} else if (method.retrieveActiveBody() instanceof StmtBody) {

} else {

}

关于java - Soot:soot.jimple.JimpleBody 无法转换为 soot.dava.DavaBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53862112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com