Print current routine stack
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | unit_nr |
SUBROUTINE print_stack(unit_nr)
!! Print current routine stack
INTEGER, INTENT(IN) :: unit_nr
INTEGER :: i
TYPE(callstack_entry_type) :: cs_entry
TYPE(routine_stat_type), POINTER :: r_stat
TYPE(timer_env_type), POINTER :: timer_env
! catch edge cases where timer_env is not yet/anymore available
IF (.NOT. list_isready(timers_stack)) &
RETURN
IF (list_size(timers_stack) == 0) &
RETURN
timer_env => list_peek(timers_stack)
WRITE (unit_nr, '(/,A,/)') " ===== Routine Calling Stack ===== "
DO i = list_size(timer_env%callstack), 1, -1
cs_entry = list_get(timer_env%callstack, i)
r_stat => list_get(timer_env%routine_stats, cs_entry%routine_id)
WRITE (unit_nr, '(T10,I4,1X,A)') i, TRIM(r_stat%routineN)
END DO
CALL m_flush(unit_nr)
END SUBROUTINE print_stack