O depurador do ABAP sempre me surpreende com uma nova funcionalidade toda vez que engasgo com o café e esbarro sem querer no mouse, fazendo-o clicar aleatóriamente em algum canto do depurador.
Desta vez descobri o botão , que permite descobrir onde o objeto de exceção foi criado através do comando
RAISE EXCEPTION
.
Este botão aparece apenas para objetos de exceção, na aba principal Objetos, e então em Exibição individual.
É possível usar o menu de depuração para colocar pontos de parada nestas instruções, mas se eu já sei onde do programa Z a exceção é capturada, pode a partir deste ponto ir voltando relativamente no tempo e ver em qual linha cada exceção foi lançada.
Se você, assim como a platéia do Sílvio Santos, só acredita vendo, copie este report e veja a mágica acontecer.
Duas exceções são lançadas e encadeadas, e o debugger mostrará exatamente onde o crimecada exceção aconteceu.
report zr_example_exceptions_newdebug. | |
class lcx_exception_demo definition | |
inheriting from cx_static_check. | |
endclass. "lcx_exception_demo DEFINITION | |
data: o_exception type ref to cx_static_check. | |
try. | |
raise exception type lcx_exception_demo. | |
catch cx_static_check into o_exception. | |
try. | |
raise exception type lcx_exception_demo | |
exporting | |
previous = o_exception. | |
catch cx_static_check into o_exception. | |
endtry. | |
endtry. | |
" It's showtime! Check the magic inside the new debugger screen, | |
" checking the o_exception object. | |
break-point. |
Infelizmente esta forma não permite visualizar os valores das variáveis naquele trecho que o RAISE EXCEPTION
foi executado após ter saído de lá, mas isto também ocorre com as exceções clássicas e exceções de módulos de função.
A exceção mais recente (primeira da cadeia, a última lançada) | A exceção mais antiga (última da cadeia, a primeira lançada) |
---|---|
![]() |
![]() |
Lembra daqueles TRY/CATCH
sem nenhum tratamento e muito menos um INTO
que você já ousou a colocar no código só por ser dia de maldade?
Pois então, agora tem (mais) um motivo para abandonar esta má prática e fazer melhor.