Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Я думаю , jtracert - то, что Вы ищете. Это генерирует диаграмму последовательности из под управлением программы Java. Кроме того, потому что его вывод является текстовым описанием схемы (в форматах нескольких популярных инструментов SD), можно использовать grep для фильтрации только для классов, которыми Вы интересуетесь.
JIVE (www.cse.buffalo.edu/jive) построит диаграмму последовательности из выполнения Java-программы. Он имеет возможность фильтра исключения, что позволит вам исключить объекты, принадлежащие к назначенным классам или пакетам. JIVE может рисовать диаграммы последовательности для выполнения многопоточных программ Java. Он также может компактировать большие диаграммы как в горизонтальном, так и в вертикальном измерениях под руководством пользователя.
Вот и дополнение к ответу Асгейра. Вот ссылка, которую я нашел.
http://www.zanthan.com/ajm/sequencev7/sequence.jar
Запуск из командной строки ... "java -jar sequence.jar" .. Это Java-приложение с графическим интерфейсом.
Раздел справки гласит: SEQUENCE - это программа для создания диаграмм последовательности UML. В отличие от большинства подобных программ, вы фактически не рисуете диаграмму. Вместо этого вы пишете текстовое описание вызовов методов, которые вы хотите построить, и макет рассчитывается и рисуется автоматически.
Так что этот инструмент ничего не реконструирует, но я вижу, как он может быть полезен, если вы хотите быстро составить схему с нуля. Похоже, он был построен в 2002 году, и я думаю, что сейчас, возможно, есть лучшие инструменты.
Вот еще один подобный инструмент: http://sdedit.sourceforge.net/example/index.html
Heatlamp ( http://www.jmolly.com/heatlamp/ ) был разработан именно для этой цели.
Он генерирует интерактивные (и печатные) диаграммы из запущенного Java-кода. Вы можете указать фильтры для описания классов, пакетов и методов для отслеживания. Вы также можете искать, фильтровать и свернуть вызовы после визуализации диаграммы, чтобы еще больше уменьшить диаграмму последовательности.
Отказ от ответственности: я автор Heatlamp.
Корпоративный архитектор из Sparx утверждает, что может перепроектировать Java-код, включая создание диаграмм последовательности - см. Этот раздел руководства пользователя
можете записать сеанс отладки, а затем вы сгенерируете диаграмму последовательности из этого
Я не пробовал (хотя использовал EA в качестве инструмента моделирования), так что ymmv!
Есть бесплатный 30-дневный доступна загрузка оценки
JTracert больше не выпускается. На месте они рекомендуют http://www.jsonde.com/
Я считаю, что идеальным инструментом для решения вашей проблемы является Diver: динамические интерактивные представления для обратного инжиниринга. Он предоставляет как статические, так и динамические диаграммы последовательности и ищет решения всех ваших требований по вашему вопросу.
Это плагин для Eclipse, позволяющий вам:
Это на Github и есть также веб-сайт проекта
Полное раскрытие: я являюсь ведущим проекта Diver
Смотрите на http://www.maintainj.com
, Это не знает, может ли это отфильтровать вызовы библиотеки, но это имеет разумный графический фронтэнд и, кажется, прослеживает даже очень крупные приложения.
Я только что начал использовать функцию записи последовательных схем в Sparx Systems Enterprise Architect. Она очень хорошо работает на C#. Можно создавать фильтры по классам и методам. На самом деле я пытаюсь выяснить, возможно ли отфильтровать весь пакет. Есть флажок для автоматического исключения внешних модулей (например, .NET Framework), который помогает в деклатере. YMMV для Java, но я думаю, что их поддержка (и документация) для Java в целом лучше (больше примеров), чем для .NET.
.У меня есть инструмент, который точно соответствует вашим требованиям. Проверьте это
http://sourceforge.net/projects/javacalltracer/
Помимо того, что это инструмент обратного проектирования для Java, он также очень легкий. Вы можете управлять тем, что хотите записать, из своей Java-программы.