【问题标题】:Soot - Unable to get soot cfg for a java method which has lambda expressionSoot - 无法为具有 lambda 表达式的 java 方法获取 soot cfg
【发布时间】:2020-04-09 15:45:49
【问题描述】:

我正在尝试获取我的代码方法的控制流图。它适用于所有方法,直到我要求它分析具有如下 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'

【问题讨论】:

    标签: lambda static-analysis soot control-flow-graph


    【解决方案1】:

    找到了解决方案。 soot 没有分析 Java 库类

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

    【讨论】:

      【解决方案2】:

      这看起来像是 Soot 中的一个错误。你能试试最新版本的Soot吗?如果错误仍然出现,如果您可以在 Github 上提交错误报告,那就太好了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多