WedX - журнал о программировании и компьютерных науках

Java-эквивалент Lisp TRACE

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

В Лиспе вы можете пометить функцию для трассировки, и тогда каждый раз при ее вызове в консоль будет выводиться примечание вместе со значениями аргументов. (Хорошо, это достаточно легко взломать на любом языке.) Каждый раз, когда он возвращается, примечание будет напечатано вместе с возвращаемым значением. (Это более сложно и более ценно.) Наконец, часть того, что делает его действительно ценным, рекурсивные вызовы отмечены отступом. Пример из https://clhs.lisp.se/Body/m_tracec.htm если факториальная функция FACT определена рекурсивно:

;; Of course, the format of traced output is implementation-dependent.
 (fact 3)
>>  1 Enter FACT 3
>>  | 2 Enter FACT 2
>>  |   3 Enter FACT 1
>>  |   | 4 Enter FACT 0
>>  |   | 4 Exit FACT 1
>>  |   3 Exit FACT 1
>>  | 2 Exit FACT 2
>>  1 Exit FACT 6
=>  6

Есть ли способ сделать что-то подобное в Java?

25.11.2018

  • Похоже, вы ищете какие-то Logging определенные качества! 25.11.2018
  • @nullpointer Просматривая документацию по платформам ведения журналов Java, я не понимаю, как они решают этот вариант использования. Что мне не хватает? 25.11.2018
  • Java не является LISP (в частности, объекты Java закрыты), хотя есть некоторые платформы АОП, которые допускают подобное. Логирование может сделать это. Профайлер лучше. Или отладчик. 25.11.2018
  • @ElliottFrisch Я не прошу, чтобы это делалось так же. Отладчик этого не делает; он просто позволяет вам просмотреть текущее значение переменных в данном кадре. В обзорной документации по ведению журнала ничего не говорится об этом. Что мне не хватает? 25.11.2018
  • Ничто из того, что я знаю, конкретно не реализует строки журнала с отступом, и было бы немного сложно добавить. Можно было бы добавить в программу просмотра журнала, если и вход, и выход из функции были зарегистрированы. 25.11.2018
  • @markspace Итак, есть ли способ зарегистрировать выход из функции? То есть это более простой способ, чем обход и ручное редактирование каждого оператора возврата в функции? 25.11.2018
  • @rwallace AOP и Cross Cutting Concern. Хотя, возможно, вам больше повезет с clojure. Или Armed Bears. 25.11.2018
  • Нет, это в значительной степени ручная регистрация каждого оператора возврата. Вот почему большинство из нас просто используют отладчик или обходятся без отступов. 25.11.2018
  • @markspace Достаточно честно, не тот ответ, на который я надеялся, но, тем не менее, четкий ответ. Спасибо! 25.11.2018

Новые материалы

Как создать диаграмму градиентной кисти с помощью D3.js
Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

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

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


Для любых предложений по сайту: [email protected]