В общем случае - никак.
Но вы можете каким-то образом выводить прогресс вычислений в реальном времени. Например, сколько процентов вычислений уже выполнено. Тогда баги будет проще заметить.
Либо можно выводить, как один этап сменяет другой (при условии, что в новом витке будет что-то новое и будет виден прогресс). Например, чтение 1000 файлов может сопровождаться выводом имени файла. И таким образом видно, что прога переходит от одного файла к другому, а не застряла где-то.
Но гарантии, естественно, нет. Даже так может зациклиться бесконечно. Просто это будет проще обнаружить - зависание прогресса, повторение этапов, непонятные скачки прогресса и т.д.