Вопрос

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

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

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

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

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

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

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

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

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

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

Спасибо!

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

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

Может быть, это можно было бы сделать с Аспект J?

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top