首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Soot -无法为具有lambda表达式的java方法获取soot cfg

Soot -无法为具有lambda表达式的java方法获取soot cfg
EN

Stack Overflow用户
提问于 2019-12-17 15:07:33
回答 2查看 250关注 0票数 0

我正在尝试获取我的代码的方法的控制流图。它对所有方法都工作得很好,直到我让它分析一个像下面这样具有lambda表达式的方法。

代码语言:javascript
复制
public void test()
    {
        List<String> test = new ArrayList<String>();
        test.forEach((action)->{
            System.out.println(action);
        });

    }

当我尝试调用Body body = method.retrieveActiveBody();时,我得到的异常是

代码语言:javascript
复制
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 

我使用的烟灰版本是

代码语言:javascript
复制
compile group:'ca.mcgill.sable', name: 'soot' , version:'3.3.0'
EN

回答 2

Stack Overflow用户

发布于 2019-12-26 13:39:52

找到了解决这个问题的方法。soot没有分析Java库类

在设置烟灰类路径之前,我调用了“Options.v().set_prepend_classpath(true);”之后,它就可以工作了

票数 1
EN

Stack Overflow用户

发布于 2019-12-18 19:44:32

这看起来像是煤烟里的虫子。你能试试最新版本的烟灰吗?如果bug仍然出现,如果你能在Github上提交一份bug报告,那就太好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59369165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档