Я пытаюсь отладить некоторый код 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?