Fazer debug a um ciclo infinito já em execução

images/thumbnail.jpg - Thumbnail

Imagina que tens um programa a executar um ciclo infinito ou, pelo menos, um ciclo com 70x7 iterações. Nunca mais acaba e tu queres saber o que lá se passa.

No passado tinhas de ir à SM50, seleccionar o processo e escolher no menu “Administração | Programa | Depuração”.

Mas agora há uma forma muito mais simples.

Request Based Debugging

images/thumbnail.jpg - Thumbnail

Se em debug consultares a variável de sistema UNAME dentro de uma chamada RFC podes achar estranho encontrar um utilizador que não o teu. O que acontece é que o sistema adopta um utilizador específico a chamadas remotas e uma nova sessão é iniciada. Uma nova sessão implica um novo contexto de execução e, consequentemente, todos os nossos breakpoints , já estrategicamente colocados, não serão reconhecidos.

Este problema pode dificultar um debug simples obrigando-nos a percorrer o código à procura DAQUELA chamada remota ÀQUELE sistema em particular.

A SAP tem a solução.

Faz debug a um job

images/thumbnail.jpg - Thumbnail

Toma lá uma forma simples de começares a fazer debug a um job:

  1. Vai à transacção SM37;

  2. Clica no job a que queres fazer debug;

  3. escreve JDBG na linha de comando (sem /) e carrega em ENTER;

  4. e… zás! estás a fazer debug ao job.

Obrigado Ricardo Monteiro pela dica. E obrigado Ingolf pela foto.

O Abapinho saúda-vos.

Atalho para viajar no tempo

images/thumbnail.jpg - Thumbnail

Há uns meses atrás mostrei como transformar o debugger numa máquina do tempo.

Hoje a dica é singela mas escorreita: há um atalho de teclado para tornar ainda mais simples este viajar enviesado:

shift + F12

Pões o cursor na linha para onde queres viajar e depois… shift+F12.

Obrigado Maxsuel Maia pela dica.

O Abapinho saúda-vos.

Fecha a janela encalhada

images/thumbnail.jpg - Thumbnail

Quantas vezes te aconteceu ficar com uma janela “pendurada” quando terminas um debug?

Pára lá mas não já

images/thumbnail.jpg - Thumbnail

Estás a fazer um LOOP AT a uma tabela com 1000 linhas e sabes que a linha que te interessa é a 853. Até há pouco tempo tinhas duas hipóteses: ou carregavas 852 vezes na tecla F8, arriscando-te a carregar 853 e teres de começar tudo de novo ou então criavas um watchpoint com a condição SY-TABIX = 852 ou lá perto e rezavas para que funcionasse.

Agora tens uma terceira alternativa.

Comando /HS

images/thumbnail.jpg - Thumbnail

Todo os funcional, até o mais funcional dos funcionais, sabe que para começar a depurar (vá, a fazer debug a) um programa ABAP se usa o comando /H. Mas raro será o programador, mesmo o mais programador dos programadores, que saberá para que serve o comando /HS.

Salta a parede

images/thumbnail.jpg - Thumbnail

Baixa a música. Fecha a porta. Olha à volta. Está alguém a olhar para ti? Não estás a ser observado? Nem câmaras de vigilância? Então, podemos continuar.

Ó Tempo Volta Para Trás

images/thumbnail.jpg - Thumbnail

“Ó tempo volta para trás Dá-me tudo o que eu perdi Tem pena e dá-me a vida A vida que eu já vivi Ò tempo volta p’ra trás Mata as minhas esperanças vãs Vê que até o próprio sol Volta todas as manhãs” - António Mourão

Ó Tony, é para já. Vou mostrar-te como podes voltar atrás no tempo.

Cria variantes de teste em funções a partir do debugger

images/thumbnail.jpg - Thumbnail

Imagina que estás a fazer debug de uma transacção e entras numa função e encontras algo interessante. Tão interessante que tens de lhe fazer debug várias vezes. A via convencional é tornar a iniciar o debug da transacção desde o início. Que seca.

Mas há uma via mais directa. Quando estás a fazer debug de uma função podes, directamente a partir do debugger, criar dados de teste para essa função com os valores com que a função tiver sido chamada nessa instância. É assim: