2013-08-19 1 views
4

Не могли бы вы сообщить мне, что Findbugs может обнаружить catcing RuntimeException в java?Может ли Findbugs обнаруживать ловушку RuntimeException в java?

Эффективная Java рекомендует не исключать RuntimeException.

Итак, я хочу знать, что Findbugs могут захватить неправильную ловушку.

Кроме того, я уже проверил Klocwork JD.CATCH и checkstyle IllegalCatch подходит для этой цели.

+1

Лучший инструмент для ловли «RuntimeException» является один сверху на шею ... –

+0

Но почему бы не автоматизировать его, если вы можете ... иногда вы наследуете большую кодовую базу, полную тривиальных ошибок, которую может уловить статический анализ. – HairyFotr

ответ

2

Сортировка. В FindBugs есть несколько детекторов ошибок, касающиеся исключений:

  • DE: Метод может упасть исключение
  • DE: Метод может игнорировать исключение,
  • Nm: Класс не является производным от Exception, даже если она называется как таковой
  • RV: Исключение было создано и сброшено, а не брошено
  • REC: Исключение было обнаружено, когда Исключение не было собственный

, а также findbugs-contrib (FindBugs плагин) имеет некоторые из них:

  • BED_BOGUS_EXCEPTION_DECLARATION
  • DRE_DECLARED_RUNTIME_EXCEPTION
  • EXS_EXCEPTION_SOFTENING_NO_CHECKED
  • EXS_EXCEPTION_SOFTENING_HAS_CHECKED
  • EXS_EXCEPTION_SOFTENING_NO_CONSTRAINTS

Попробуйте эти параметры и проверьте, соответствуют ли они вашим требованиям (особенно последний (REC) of fb). Однако, если явно необходимо обнаружить следующую закономерность:

catch (RuntimeException re){ 
    ....    
} 

Вам может понадобиться реализовать свой собственный (очень легкий) шаблон ошибка для FindBugs ...

+0

Спасибо за ваш ответ. Я просматриваю шаблоны ошибок Findbugs. Не могли бы вы сообщить мне, что означают такие ключевые слова, как «DE» или «Nm»? – 500004dolkong

+0

Это просто аббревиатуры - например, REC, возможно, означает «Runtime Exception Catch (ing)» или EXS означает «Сглаживание приисков». Но для вас, конечников нет особого смысла ... – Lonzak