我正在尝试获取我的代码的方法的控制流图。它对所有方法都工作得很好,直到我让它分析一个像下面这样具有lambda表达式的方法。
public void test()
{
List<String> test = new ArrayList<String>();
test.forEach((action)->{
System.out.println(action);
});
}当我尝试调用Body body = method.retrieveActiveBody();时,我得到的异常是
java.lang.RuntimeException: Failed to convert <combin.Line: void test()>
at soot.asm.AsmMethodSource.getBody(AsmMethodSource.java:2040)
at soot.SootMethod.retrieveActiveBody(SootMethod.java:402)
Caused by: java.lang.RuntimeException: No method java.lang.Boolean valueOf(boolean) in class java.lang.Boolean
at soot.SootClass.getMethod(SootClass.java:412)
at soot.LambdaMetaFactory$Wrapper.<init>(LambdaMetaFactory.java:285)
at soot.LambdaMetaFactory.<init>(LambdaMetaFactory.java:63)
at soot.Singletons.soot_LambdaMetaFactory(Singletons.java:2408)
at soot.LambdaMetaFactory.v(LambdaMetaFactory.java:67)
at soot.asm.AsmMethodSource.convertInvokeDynamicInsn(AsmMethodSource.java:1420)
at soot.asm.AsmMethodSource.convert(AsmMethodSource.java:1791)
at soot.asm.AsmMethodSource.getBody(AsmMethodSource.java:2038)
... 8 more 我使用的烟灰版本是
compile group:'ca.mcgill.sable', name: 'soot' , version:'3.3.0'发布于 2019-12-26 13:39:52
找到了解决这个问题的方法。soot没有分析Java库类
在设置烟灰类路径之前,我调用了“Options.v().set_prepend_classpath(true);”之后,它就可以工作了
发布于 2019-12-18 19:44:32
这看起来像是煤烟里的虫子。你能试试最新版本的烟灰吗?如果bug仍然出现,如果你能在Github上提交一份bug报告,那就太好了。
https://stackoverflow.com/questions/59369165
复制相似问题