Подтвердить что ты не робот

Eclipse - показывает полный стек вызовов (например, когда он достигает точки останова в отладчике), не помещая точки останова?

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

Извиняюсь, если это основной вопрос, я искал это, но я не нахожу правильный ответ.

4b9b3361

Ответ 1

Это не дает прямого ответа на ваш вопрос, но, возможно, это решит вашу проблему лучше. Взгляните на BTrace. Он позволяет вам запускать Java-приложение и вставлять собственный базовый код. Например, вы можете написать целые цепочки вызовов, чтобы помочь вам найти свой путь через приложение. Он несколько похож на AspectJ, но с совершенно другой целью и не требует изменений в источнике проекта:

"BTrace - это безопасный инструмент динамической трассировки для Java. BTrace работает с помощью динамического (байт-кода) инструментальных классов исполняемой Java-программы. BTrace вставляет трассировочные действия в классы запущенной Java-программы и hotswaps отслеживаемые классы программ".

Ответ 2

Когда вы находитесь в перспективе отладчика, вы увидите представление, показывающее запущенные процессы. В этой точке зрения вы можете сказать, чтобы он приостанавливал все потоки процесса. После остановки вы сможете просматривать темы, чтобы посмотреть, что они все делают. Чтобы попытаться поймать то, что делает определенное действие, вам нужно будет начать действие, а затем быстро приостановить все потоки.

Ответ 3

Вы всегда можете запустить приложение с помощью VM arg -verbose: class. Затем вы можете посмотреть вывод консоли и посмотреть, какие классы VM загружает, когда вы выполняете определенное действие. Возможно, это даст вам место для размещения точек останова. Это не всегда будет работать в зависимости от сценария, но может быть полезно.

Ответ 4

Другим трюком, который вы можете использовать, является определение того, какие классы вы знаете, которые должны быть вовлечены в путь кода, который вы пытаетесь захватить. Например, вы упомянули, что это веб-приложение Java EE, и поэтому действие, скорее всего, представляет собой какое-то взаимодействие с сервлетом (на некотором уровне). У меня нет API передо мной, но вы можете разместить точку останова на методе в объекте ответа, где извлекается выходной поток. После этого вы узнаете код, который пытается обслуживать запрос.

Ответ 5

Несколько предложений:

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

Для понимания потока mainline я не думаю, что там лучше заменить интерактивную работу с отладчиком. Это приведет вас к изучению других важных вещей. Я не знаю, что ты хотел услышать. Это предполагает, что вы можете быстро перезапустить приложение, когда вы пропустите клавишу с рампой.

Обратное проектирование больших унаследованных приложений - это одно место, где я регулярно использую UML. Там слишком много, чтобы держать в голове, чтобы сформировать хорошую общую картину. Если у вас есть инструмент UML, который будет выполнять обратное проектирование, загрузите его с помощью приложения, то, вероятно, вы можете отказаться от классов, которые вам не нужны, потому что они тривиальны или очевидны. Расположите диаграммы таким образом, чтобы вы могли понять. Таким образом я использовал Together, Magic Draw и Visual Paradigm. Вместе работала лучше всего - но это было десять лет назад.

Ответ 6

Вы всегда можете увидеть, где вызывается метод, нажав "Иерархия открытых вызовов" из eclipse (щелкните левой кнопкой мыши по выбранному методу или CTRL + ALT + H). Кроме того, вы всегда можете проверить, где определен метод/класс, нажав "Открыть объявление" (щелкните левой кнопкой мыши по выбранному методу/классу или F3).