Я делал это раньше, когда застрял в ситуации, когда больше ничего не работает. На самом деле я вошел и вставил sysout через каждые две строки, как только у меня был правильный метод.
(Например, я просто работал над JVM, где RMI-вызовы, которые вызывали исключение, молча съедались, а вызывающий поток просто зависал на неопределенное время! О, и, конечно, мы не могли использовать отладчик. Как еще вы найти что ??)
В любом случае, просто запустить программу, которая вставляет отладочный вывод ВЕЗДЕ, не поможет. Вы потеряетесь, анализируя страницы вывода. Вместо этого попытайтесь заключить в скобки, где проблема и вручную вставить выходные строки там.
Если ваша нить «исчезает» в одной строке или делает неожиданный поворот, разбейте эту цепочку на минимальные пригодные для выполнения куски, выясните, какая часть не удалась, затем погрузитесь в нее и повторите - больше ничего не нужно делать.
Кстати, еще один полезный инструмент - даже на очень старой JVM, в любой момент вы можете добавить "(new Exception ()). PrintStackTrace ();"; выгрузить стек без влияния на поток программы. Если вы оказались в каком-то месте и не знаете, как туда попали, это может помочь.
Наконец, если вы хотите быть очень ленивым, вы можете использовать один статический метод для выполнения всех ваших выводов отладки (тот, который просто делегирует System.out.println), и добавить пару строк для получения трассировки стека, захватить только строку / метод "Вызов" и распечатайте его перед оператором отладки, что даст вам утилиту ведения журнала для бедняков.
Просто некоторые уловки по ручной отладке, которые я выучил за годы работы со старыми версиями Java на встроенных платформах.