Нахождение фактического дерева вызовов времени выполнения Java-программы - PullRequest
1 голос
/ 06 апреля 2010

Предположим, у меня есть большая программа, состоящая из сотен методов. И в зависимости от характера ввода поток программы меняется.

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

Есть ли у меня какое-нибудь решение для этого в Eclipse? Или плагин? В качестве примера, мне просто нужен журнал имен методов в порядке времени. Тогда мне не нужно беспокоиться о методах, которые не относятся к моему «заданному входу»

Обновление: использование режима отладки в Eclipse или добавление сообщений для печати невозможно. Программа оооочень большая. :)

Ответы [ 2 ]

5 голосов
/ 06 апреля 2010

Вы можете использовать AspectJ для записи имени всех методов с именем без изменения исходной программы.

См. трассировка например.

aspect SimpleTracing {
    pointcut tracedCall():
        call(void FigureElement.draw(GraphicsContext));

    before(): tracedCall() {
        System.out.println("Entering: " + thisJoinPoint);
    }
}
1 голос
/ 06 апреля 2010

Если все, что вы хотите знать - это то, что были вызваны методы , а не точный порядок, вы можете рассмотреть возможность использования инструмента покрытия теста. Эти инструменты обрабатывают исходный код для сбора фактов «это выполнено» с различной степенью детализации (только вызов метода и / или каждый блок кода, управляемый условным выражением).

Инструмент тестирования покрытия SD - это инструмент, который сделает это.

Он не будет собирать график вызовов или даже порядок вызовов.

Если вам нужен больший контроль над контрольно-измерительными приборами, вы можете использовать DMS Software Reengineering Toolkit . DMS будет анализировать, преобразовывать и распечатывать Java произвольным способом, управляемым пользовательскими программами преобразования правил перезаписи. Было бы легко вставить преобразования регистрации в начало и конец каждого метода (и на самом деле это почти точно так, как работает инструмент охвата тестирования SD). Учитывая необработанные данные enter-X и exit-X, построение дерева вызовов времени выполнения является простой задачей.

...