Java 哈德逊&x27;s FindBugs插件报告行号“-1“;为了臭虫。思想?

Java 哈德逊&x27;s FindBugs插件报告行号“-1“;为了臭虫。思想?,java,hudson,findbugs,Java,Hudson,Findbugs,您好, 我在Hudson中设置了一个简单的测试项目,该项目的构建过程(一个批处理文件)生成一个findbugs.xml文件。这是由Hudson的FindBugs插件处理的,但它将bug的行号显示为“-1”,而不是它们的实际行号。一位同事建议我为编译器启用调试信息。我为javac使用了-g“生成所有调试信息”选项,但似乎没有任何变化。我的生成命令是: javac -g -classpath C:\testWebApp1\src -d C:\testWebApp1\build C:\testWebA

您好,
我在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插件对第一个bug的描述:

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

有什么想法吗?非常感谢

这是答案的一半:

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

或者,您也可以尝试,这会更吵,但实际上会分析源代码和代码


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

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

这里的关键是
,它报告了发现错误的行号。对于许多其他检查,包括未读字段的检查和字节码中没有行号的两种其他情况,此行填写正确,但不适用于
UUF\u UNUSED\u字段
。因此,Hudson插件正在做明智的事情,并报告
line=-1

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


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

您几乎可以使用-g。Findbugs基于字节码分析,并且取决于类文件中的调试信息,您的同事是对的


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

Hmm,许多命令行实用程序都有一个递归模式的-R标志,也许如果您使用此标志运行它,它将能够识别自己的问题。;)啊哈,我想那是我的问题!我引入的错误是与成员变量有关的,因此可以解释这一点。我猜-g也不能用来存储这些产品的行号,这很好。等等!我尝试了Eclipse find bugs插件,并加载了命令行调用生成的findbugs.xml文件(长话短说,不是Eclipse中生成的文件)。里面有行号!对于未使用的类成员变量:P,它将第一个_版本列为-1。你认为Hudson插件在行号字段中读取了错误的值吗?就个人而言,我对EclipseFindBug插件的工作原理感到困惑。它必须使用Eclipse的源代码分析做一些额外的工作。这里有一个与FindBugs相关的问题:。在分析类文件的过程中,行号根本就不存在。哇,非常感谢您深入了解这一点。在xml文件中,确实没有字段的行号。课堂,是的,但不是场地。知道发生了什么我感觉好多了。