gpt4 book ai didi

java - Hudson 的 FindBugs 插件报告行号 "-1"的错误。有想法吗?

转载 作者:行者123 更新时间:2023-12-01 16:05:51 27 4
gpt4 key购买 nike

您好,
我在 Hudson 中设置了一个简单的测试项目,该项目的构建过程(批处理文件)生成一个 findbugs.xml 文件。这是由 Hudson 的 FindBugs 插件处理的,但它将 bug 的行号显示为“-1”,而不是它们的实际行号。一位同事建议我启用编译器的调试信息。我对 javac 使用了 -g“生成所有调试信息”选项,但似乎没有任何变化。我的构建命令是:

javac -g -classpath C:\testWebApp1\src -d C:\testWebApp1\build C:\testWebApp1\src\*.java

build.bat 文件中唯一的其他内容是对 FindBug 工具(文本 UI)的调用。以下是 FindBugs 插件关于第一个错误的描述:

File: GenerateHellos.java, Line: -1, Type: UUF_UNUSED_FIELD, Priority: Normal, Category: PERFORMANCE

有什么想法吗?非常感谢!

最佳答案

这是答案的一半:

您在该类中声明了一个未使用的字段。 FindBugs 使用字节码的静态分析来查找错误;不幸的是,字节码格式不存储类或成员字段的行号,因此 FindBugs 实际上无法报告行号。必须有一些开关可以让它输出更多有用的信息(即字段的名称),但我不知道。

或者,您可以尝试 PMD ,噪音大了很多,但实际上分析了源代码和 also integrates with Hudson .

<小时/>

做了更多的挖掘,看起来这可能是检查器中针对该错误模式的错误。假设您的 FindBugs 运行配置了适当的源目录(即使用 -sourcepath ),则发现的大多数错误应该具有与其关联的行号。要检查这一点,请打开输出的报告。您应该看到如下所示的元素:

<!-- skipping a bit -->
<BugInstance type="...">
<Class classname="com.example.MyClass">
<!-- ... -->
</Class>
<!-- ... -->
<SourceLine classname="com.example.MyClass" start="5" end="5" sourcefile="MyClass.java"/>
</BugInstance>

关键是<SourceLine classname="..."/> ,它报告发现错误的行号。对于许多其他检查,包括未读字段的检查以及字节代码中没有行号的其他一些情况,此行已正确填写,但不适用于 UUF_UNUSED_FIELD 。因此,Hudson 插件正在做明智的事情并报告 line = -1 .

然而,Eclipse 插件可以访问 Eclipse 有关源代码的丰富元数据,能够通过匹配字段名称来定位字段,因此,它似乎可以在 Eclipse 中工作(如果您在 Eclipse 中删除有问题的字段)您应该会看到错误显示在文件的第一行;其他错误显示在 XML 报告中指定的行号上)。

没有修复,但希望这能澄清正在发生的事情。

关于java - Hudson 的 FindBugs 插件报告行号 "-1"的错误。有想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2639636/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com