一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何在不重新打包环境下高效调试 find-sec-bugs 新增检测器

时间:2026-07-12 09:19:45 编辑:袖梨 来源:一聚教程网

本文介绍如何在 intellij idea 等 ide 中直接调试 find-sec-bugs 的自定义检测器,无需反复构建 jar 包,通过单元测试驱动和远程调试两种方式实现快速开发与问题定位。

本文介绍如何在 intellij idea 等 ide 中直接调试 find-sec-bugs 的自定义检测器,无需反复构建 jar 包,通过单元测试驱动和远程调试两种方式实现快速开发与问题定位。

在 find-sec-bugs 项目中开发新检测器(Detector)时,完全不必每次修改后都执行 mvn package 并手动替换 CLI 中的 plugins.jar——这种做法低效且易出错。推荐采用以下两种高效、可复现的调试方式:

✅ 方式一:通过单元测试本地调试(推荐首选)

find-sec-bugs 官方为每个检测器均提供了标准的 JUnit 测试用例(如 FileUploadFilenameDetectorTest),其核心逻辑是:

  • 使用 SpotBugsFramework 加载当前项目中的 FSB 插件类路径;
  • 扫描指定的测试字节码(.class 或 .jar);
  • 断言是否触发预期的漏洞告警(BugInstance)。

你只需:

  1. 在 findsecbugs-plugin/src/test/java/ 下新建测试类(建议命名如 YourCustomDetectorTest.java);
  2. 复制已有测试结构,将待测类路径指向你修改/新增的 Detector 类;
  3. 在测试方法中设置断点 → 右键 → Debug 'YourCustomDetectorTest',IDE 将直接进入你的 Detector visitMethod()、sawOpcode() 等生命周期方法。

示例测试片段(简化版):

@Testpublic void testYourDetector() throws Exception {    String[] files = {"path/to/YourVulnerableClass.class"};    BugReporter reporter = new SelfCheckingBugReporter();    // 自动加载当前模块中所有 Detector(含你刚写的)    SpotBugsFramework.runAnalysis(files, reporter,         new Class<?>[]{YourCustomDetector.class});    assertEquals(1, reporter.getBugCount()); // 断言触发一条告警}

⚠️ 注意事项:确保 Maven 依赖已正确导入(尤其是 spotbugs, findsecbugs-plugin),且测试运行时使用 "Use classpath of module: findsecbugs-plugin"(IDEA 中右键测试 → Run Configurations → Use classpath of module)。

? 方式二:远程调试 CLI(适用于真实场景验证)

当需验证 Detector 在完整 CLI 流程中的行为(如多 JAR 分析、参数传递、报告生成等),可启用 JVM 远程调试:

  1. 修改 cli/findsecbugs.sh(Linux/macOS)或 cli/findsecbugs.bat(Windows):
    • 在 java 命令行中添加 JVM 参数(插入到 -jar 之前):
      -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=127.0.0.1:8000
  2. 启动 CLI(例如 ./findsecbugs.sh -textui -progress -output report.txt target/app.jar);
  3. 在 IDEA 中配置 Remote JVM Debug
    Host: 127.0.0.1,Port: 8000 → 点击 ▶️ 连接;
  4. 在 Detector 源码中设置断点,CLI 执行扫描时将自动命中。

✅ 优势:真实环境复现、支持复杂输入;
⚠️ 注意:suspend=n 表示启动不挂起,若需在 main 入口前断点,请改用 suspend=y 并等待 IDE 连接后再继续。

? 总结

场景 推荐方式 关键优势
快速验证 Detector 逻辑、opcode 解析、bug 报告条件 单元测试本地调试 启动快、断点精准、可自动化回归
验证 CLI 集成、跨类分析、报告输出等端到端行为 CLI 远程调试 环境真实、覆盖完整执行链路

无论哪种方式,均无需重新打包整个项目——只要你的 Detector 类被 IDE 正确编译并纳入测试/运行类路径,即可实时调试。这是 find-sec-bugs 社区推荐的标准开发实践,大幅降低 Java 静态分析插件的入门门槛。

热门栏目