ASM

运行时抛此异常


image.png

看到的是这样


image.png

查看字节码是这样
image.png

查看覆盖率报告,main方法是肯定执行过的,但没有覆盖率,而子类Foo里是有覆盖率的。


image.png

使用IDEA看到的是这个样子

package com.example.demo;

import com.sankuai.jacoco.DataDump;

public class Main {
    static int a = 0;

    Main() {
        System.out.println("Main construct.");
    }

    void test() {
        System.out.println("test for main");
    }

    public static void main(String[] var0) {
        DataDump.start("com.example.windows1", "window_app_jar_test3", "debug");
        System.out.println("main start.");
        Main main = new Main();
        main.test();
        Main.Foo f = new Main.Foo();
        f.execute();
        Executor foo = new Executor();
        foo.exec();
    }

    public static class Foo {
        public Foo() {
            boolean[] var1 = $jacocoInit();
            super();
            var1[0] = true;
        }

        public void execute() {
            boolean[] var1 = $jacocoInit();
            System.out.println("Hello,World");
            var1[1] = true;
        }
    }
}

使用Jadx工具看到的是这个样子

package com.example.demo;

import com.sankuai.jacoco.DataDump;
import org.jacoco.agent.rt.internal_b0d6a23.Offline;

public class Main {
    static int a = 0;

    public static class Foo {
        private static final transient /* synthetic */ boolean[] $jacocoData = null;

        private static /* synthetic */ boolean[] $jacocoInit() {
            boolean[] zArr = $jacocoData;
            if (zArr != null) {
                return zArr;
            }
            zArr = Offline.getProbes(-4908124945768433721L, "com/example/demo/Main$Foo", 2);
            $jacocoData = zArr;
            return zArr;
        }

        public Foo() {
            $jacocoInit()[0] = true;
        }

        public void execute() {
            boolean[] $jacocoInit = $jacocoInit();
            System.out.println("Hello,World");
            $jacocoInit[1] = true;
        }
    }

    Main() {
        System.out.println("Main construct.");
    }

    void test() {
        System.out.println("test for main");
    }

    public static void main(String[] strArr) {
        DataDump.start("com.example.windows1", "window_app_jar_test3", "debug");
        System.out.println("main start.");
        new Main().test();
        new Foo().execute();
        new Executor().exec();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容