Автоматическая обработка исключений - PullRequest
8 голосов
/ 16 декабря 2008

Мне было интересно, существует ли что-то (в мире Java), способное сделать снимок текущего состояния JVM со следующими функциями:

  • Делайте это, пока выдается исключение.
  • Захватывать локальные переменные, аргументы метода и т. Д.
  • Поместите его в удобный файл, который можно использовать для извлечения или воспроизведения в IDE ситуации в вашем исходном коде.

Требуются две первые функции (третья будет потрясающей). И он должен быть пригоден для производственного использования (то есть, нет никакой возможности отладчиков).

Прежде чем спросить об этом, я искал в WWW (как можно дольше) и нашел несколько указателей:

  • Cajoon Interceptor : Как сказано в Dzone post , это пассивный агент JVM, который выполняет три требования! Но у этого есть два недостатка: вы должны заплатить за него, и сайт не работает (возможно, нет никакой возможности заплатить что-либо).
  • AviCode Intercept Studio : эквивалент Cajoon .NET. Просто, чтобы дать некоторое представление о.
  • JavaFrame : Хорошо, это твит, но он указывает на доступное репозиторий SVN с исходным кодом (под лицензией MIT) агента JVM, который выглядит нормально (я собираюсь дать попробуйте).

Так, может, я ищу несуществующее решение? Это не срочно, но у меня была идея для проекта, и было бы здорово изучить этот «неизвестный» (?) Путь и получить что-то реальное.

Кажется очевидным, что это будет агент JVM (исключение из JVMTI, для пример ).

Наконец, я бы выделил следующий абзац из статьи Википедии по обработке исключений :

В средах работы двигателя, таких как Java или .NET, существуют инструменты, которые прикрепить к двигателю времени выполнения и каждый время, что исключение интереса происходит, они записывают отладку информация, которая существовала в памяти на время исключения (вызов стека и значений кучи). Эти инструменты называются Automated Exception Инструменты обработки или перехвата ошибок и предоставить информацию о первопричинах для исключений.

Это идея. Я надеюсь, что кто-то может дать мне некоторое представление или, возможно, в будущем кто-то вдохновится этим скромным постом:)

Спасибо!

Ответы [ 4 ]

2 голосов
/ 18 декабря 2008

Я смотрю на JavaFrame , и это кажется хорошей отправной точкой. Просто установите Apache Ant, выполните ant в каталоге javaframe и запустите набор тестов (внутри каталога test) с помощью:

LD_LIBRARY_PATH=../build/native/ java -agentlib:frameintrospect -classpath ../build/classes/:. org.thobe.frame.Test

Он не получает никакой локальной переменной, но пытается. Так что, как я уже сказал, это может быть отправной точкой. Я надеюсь получить более подробную информацию о его использовании, но нет времени и нет документации (есть много проектов с именем JavaFrame) плохие обстоятельства.

Может быть, когда-нибудь это можно будет сделать снова. Да опять Был Cajoon, он выглядел многообещающе и блестяще, но его веб-сайт не работает, и нет никаких следов загружаемой банки.

Спасибо всем!

PD .: Просто для справки, некоторые ссылки, которые я нашел при исследовании:

1 голос
/ 17 декабря 2008

Возможно, вы захотите ознакомиться с работой, которую проделал NetBeans в отношении автоматического ведения журнала использования: http://wiki.netbeans.org/UsageLoggingSpecification.

Что касается выгрузки локальных переменных, я мог бы представить, что вы можете просто использовать отладчик, такой как тот, который упоминал bajafresh4life.

1 голос
/ 17 декабря 2008

Может быть, это можно сделать с AspectJ ?

0 голосов
/ 16 декабря 2008

Не уверен, что это жизнеспособно в производственной среде, но есть отладчик Omniscient:

Что, если ваш отладчик может пойти "назад во времени"? Это облегчит отладку? Просто записав все присвоения переменных, это можно сделать по существу. Это основная идея всеведущей отладки. Удивительно, что таким способом можно отлаживать значительно большие программы - Ant, JUnit, сам отладчик

http://www.lambdacs.com/debugger/

...