2010-04-14 2 views
0

인사말,
나는 간단한 테스트 프로젝트를 허드슨에 설치했고 프로젝트의 빌드 프로세스 (배치 파일)는 findbugs.xml 파일을 생성한다. 이것은 Hudson의 FindBugs 플러그인에 의해 처리되지만 실제 라인 번호 대신 버그의 라인 번호가 "-1"로 표시됩니다. 동료가 컴파일러에 디버그 정보를 사용하도록 제안했습니다. javac에 대해 -g "Generate all debugging info"옵션을 사용했지만 아무 것도 변경되지 않은 것 같습니다. 내 빌드 명령은 다음과 같습니다Hudson의 FindBugs 플러그인은 버그에 대해 라인 번호 "-1"을보고합니다. 아이디어?

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

경우 build.bat 파일에서 유일하게 다른 것은이 FindBug 도구 (텍스트 UI)를 호출합니다. 다음은 FindBugs Plugin이 첫 번째 버그에 대해 말한 내용입니다.

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

아이디어가 있습니까? 엄청 고마워! 당신은 그 클래스에 선언되지 않은 필드가

:

+0

흠 많은 명령 줄 유틸리티는 재귀 모드에 대해 -R 플래그를 가지고 있습니다. 아마도이 플래그로 실행하면 자체 문제를 식별 할 수 있습니다. ;) – crowne

답변

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은 채워지지 않습니다. 따라서 허드슨 플러그인은 현명한 일을하고 있으며보고는 line = -1입니다.

그러나 소스 코드에 대한 Eclipse의 풍부한 메타 데이터에 액세스 할 수있는 Eclipse 플러그인은 필드 이름을 일치시켜 필드를 찾을 수 있으므로 Eclipse에서 작동하는 것처럼 보입니다 (해당 필드를 이클립스에서는 파일의 첫 번째 줄에 버그가 표시되고 다른 버그는 XML 보고서에 지정된 줄 번호에 표시됩니다.

수정 사항은 없지만 문제가 무엇인지 명확하게 설명합니다.

+0

아하, 그건 내 문제라고 생각해!내가 소개 한 오류는 멤버 변수와 관련되어 있으므로 설명 할 수 있습니다. 나는 그것들을 위해 라인 번호를 저장하지 않는다고 생각한다. – Vimes

+0

기다려! 이클립스 find-bugs 플러그인을 시도하고 findbugs.xml 파일을로드하여 내 명령 행 호출이 생성되었다 (Eclipse에서 생성 된 것이 아니라 긴 이야기). 거기에 줄 번호가 있습니다! 사용되지 않는 클래스 멤버 변수의 경우 : P FIRST_VERSION을 -1로 나열합니다. 허드슨 플러그인이 라인 번호 필드에 잘못된 값을 읽고 있다고 생각합니까? – Vimes

+0

개인적으로 필자는 실제로 Eclipse FindBug 플러그인이 작동하는 이유에 대해 혼란스러워합니다. Eclipse의 소스 분석을 사용하여 추가 작업을해야합니다. 다음은 관련된 FindBugs 문제입니다 : http://sourceforge.net/tracker/index.php?func=detail&aid=1200301&group_id=96405&atid=614693. 클래스 파일을 분석하는 동안 행 번호가 없습니다. – ig0774

0

거의 -g와 함께 있습니다. Findbugs는 바이트 코드 분석을 기반으로하며 클래스 파일에있는 디버깅 정보에 따라 다르므로 동료가 바로 이에 대한 것입니다.

컴파일러는 타임 스탬프를 기반으로하므로 이전에 생성 된 클래스 파일도 정리해야하며 최신으로 표시되는 파일은 다시 생성되지 않습니다.