0

こんにちは。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

何か案は?ありがとうございます!

4

2 に答える 2

1

これは答えの半分です:

そのクラスで未使用のフィールドが宣言されています。FindBugs は、バイト コードの静的解析を使用してバグを見つけます。残念ながら、バイト コード形式はクラスまたはメンバー フィールドの行番号を保存しないため、FindBugs は実際に行番号を報告できません。より役立つ情報 (つまり、フィールドの名前) を出力できるスイッチが必要ですが、私にはわかりません。

または、 PMDを試すこともできます。これはノイズが多いですが、実際にはソース コードを分析し、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 レポートで指定された行番号に表示されます)。

修正はありませんが、何が起こっているのかが明確になることを願っています。

于 2010-04-14T18:06:08.413 に答える
0

-g でほぼ完了です。Findbugs はバイトコード分析に基づいており、クラス ファイルにあるデバッグ情報に依存します。あなたの同僚はそれについて正しいです。

また、コンパイラはタイムスタンプに基づいており、最新のように見えるファイルを再生成しないため、以前に生成されたクラス ファイルを消去する必要があります。

于 2010-04-14T20:39:18.823 に答える