Hudson的FindBugs插件报告错误的行号“-1”。想法?

时间:2010-04-14 17:37:56

标签: java hudson findbugs

问候,
我在Hudson中设置了一个简单的测试项目,项目的构建过程(批处理文件)生成了一个findbugs.xml文件。这是由Hudson的FindBugs插件处理的,但是它将错误的行号显示为“-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

有什么想法吗?万分感谢!

2 个答案:

答案 0 :(得分:1)

这是答案的一半:

您在该类中声明了一个未使用的字段。 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报告中指定的行号上。

没有修复,但希望澄清发生了什么。

答案 1 :(得分:0)

你几乎和-g在一起。 Findbugs基于字节码分析,并且取决于类文件中的调试信息,您的同事是正确的。

您还需要清除以前生成的任何类文件,因为编译器基于时间戳,并且不会重新生成最新的文件。