场景一:统计总覆盖率(当前能跑的状态)
cd /home/lyh/ins/javarce/SQL && mvn spring-boot:run
-Dspring-boot.run.jvmArguments="-javaagent:/home/lyh/ins/instrument/target/coverage-agent-1.0.0.jar"
-Dspring-boot.run.arguments="--server.port=8081"
curl "http://127.0.0.1:8081/sql/mysql/case1?id=1&username=admin&password=235711"
[Coverage] Edges hit: 12 / 65536 [Coverage] Coverage: 0.02% 适合:对比"改动前后走了多少代码路径",或者验证测试用例有没有覆盖到目标方法。
场景二:Fuzzing 引导(VirtualThreadBatchHttpClient 的设计目标) 每发一次请求后,立即读取本轮覆盖率,发现新路径就保存种子:
发请求 → getAndReset() 读取本轮 hits[] → 和历史比较 → 有新 edge → 存种子 → 变异再发 但有个限制:CoverageTracker 在目标 JVM 内部,外部 Fuzzer 进程无法直接调用 getAndReset()。要打通这一步,需要选一种 IPC 方案:
方案 做法 复杂度 HTTP endpoint 在 Spring Boot 里加 /coverage 接口返回 hits[] 低 文件 getAndReset() 把结果写到 /tmp/coverage.bin 低 共享内存 mmap,AFL 原版的做法,性能最好 高 现在缺什么:VirtualThreadBatchHttpClient.java 里的 CoverageTracker.getAndReset() 直接调用是占位写法,实际要改成通过上面某种 IPC 读数据。
你想做哪个场景?