2015-01-08 8 views
2

나는이 같은 서명으로 Java 메소드에 대한 모든 호출에 보이는 OpcodeStackDetector에 따라 Findbugs 검출기, 쓰고 있어요 :메소드 인수의 Throwable 형태의 경우 알고있는 findbugs 검출기를 작성

void foo(Object...args) 

args 중 하나가 Throwable 유형이거나 그 자손 중 하나이면 버그를보고해야합니다.

인수를 나타내는 메서드 호출에 대한 참조 목록을 얻은 다음 각 인수의 클래스가 java.lang.Throwable의 하위 형식인지 확인합니다.

+1

이클립스 플러그인 http://findbugs.sourceforge.net/downloads.html이 있으며 소스를 사용할 수 있습니다 - 그래서 한번보세요? – Margus

+0

findbugs 소스 코드를 다운로드하고 답변을 검색했으나 찾을 수 없습니다. –

답변

0

OpcodeStackDetector가 스택을 누적하는 것을 볼 수 있습니다. 따라서 검색 (INVOKEVIRTUAL, INVOKESPECIAL 등 ​​중 하나)에서 메소드 호출 작업을 볼 때 스택 맨 위에 배열의 참조가 있어야합니다. 사물.

Findbugs에는 바이트 코드를 이해하기위한 ASM 및 BCEL 라이브러리가 포함되어 있으므로 참조를 메모리의 실제 배열로 연결하고 배열에서 오브젝트 참조 목록을 얻는 것이 가능해야합니다. 여기에서 ASM/BCEL을 사용하여 각 참조 유형을 확인할 수 있습니다.

당신이 어떻게 그렇게 나를 혼란스럽게하고 있습니다.