Você está na página 1de 34

Debug

no

SAP
Iniciando o debug

No campo de comando da tela do SAP, digite /h e tecle Enter.

Campo de comando

2
O Ambiente

Uma tela como a mostrada abaixo aparecerá. A ferramenta de debug do ABAP está
iniciada e pronta para ser utilizada.

3
Botões de Depuração:

Os botões de depuração permitem que a execução continue.

F5 F6 F7 F8

 F5: continua o processamento sempre instrução a instrução;


 F6: continua o processamento também instrução a instrução. Interpreta uma
chamada a procedimento como uma única instrução;
 F7: continua o processamento até o final do procedimento atual;
 F8: continua o processamento até o final do programa.

O que foi dito vale apenas se não houver um ponto de parada no meio do caminho.

IMPORTANTE: O programa pode cancelar se tentarmos depurar uma instrução


select ... endselect. Recomenda-se fazer um ponto de parada na instrução imediatamente
abaixo e avançar até ele com F7 ou F8.

Botões de Pesquisa:

Esse botões permitem a pesquisa de uma cadeia alfanumérica no código-fonte em


execução.

Continua a pesquisa

Inicia a pesquisa

Para iniciar a pesquisa, basta informar a cadeia e teclar Enter.

O segundo botão permitirá a pesquisa pela mesma cadeia sem que seja necessário
informá-la novamente.

4
Botões de Paginação do Código-fonte:

Os botões de paginação permitem o avanço ou o retrocesso de páginas de código-


fonte sem que o processamento continue.

Avança para a última página (Ctrl-Page Down)

Avança para a página seguinte (Page Down)

Retrocede para a página anterior (Page Up)

Retrocede para a primeira página (Ctrl-Page Up)

Outros botões permitem também o avanço ou o retrocesso linha a linha. Nesse caso,
também é possível digitar a linha inicial no local apropriado.

Avança para a linha seguinte

Linha inicial da tela

Retrocede para a linha anterior

Botão de Retorno à Instrução Atual:

Esse botão permite a navegação pelo código-fonte sem que tenhamos de nos
preocupar com a localização da instrução que está para ser executada. Não importa o ponto
do programa onde estejamos no momento, basta clicar nesse botão para sermos remetidos à
instrução atual.

5
Botão de Descarte Informações:

O botão de descarte permite que os componentes do programa sejam eliminados da


área de visualização da ferramenta de debug. Esse procedimento ocorre, por exemplo,
quando nenhuma das informações que estão sendo exibidas continua útil.

Botão de Gravação Pontos de Parada:

Os pontos de parada simples são definidos dando-se duplo-clique na instrução


desejada ou clicando-se na instrução e definindo o ponto via menu. Nesse momento, um
ícone Stop aparecerá na linha escolhida.
Vale a mesma regra quando se deseja eliminar o ponto de parada. Essa ação
eliminará o ícone citado.

Uma vez definido, o ponto de parada pode ser gravado no programa. A gravação
vale para todos os modos da sessão, mesmo se precisarmos sair e retornar ao programa.

6
Nomes dos programas/procedimentos:

O ambiente de depuração mostra o nome do programa principal, do programa atual


e do procedimento em execução naquele instante.

Programa principal

Programa em execução

Procedimento (form) em execução

Variáveis de Sistema:

 Sy-subrc: é zero se a última instrução obteve sucesso, senão armazena o código


do erro ocorrido. Nem todos os comandos atualizam essa variável. Se houver
dúvida quanto a isso, acesse a ajuda pela transação SE38, posicionando o cursor
no comando e pressionando F1;
 Sy-tabix: armazena o índice da entrada recuperada no último acesso a uma
tabela interna. Se estivermos numa varredura (loop), terá o valor do índice
referente à entrada que estiver em processamento;
 Sy-dbcnt: armazena a quantidade de entradas afetadas pelo último acesso feito
ao banco de dados.

Expansão/Restauração da Área de Código Fonte:

O botão de expansão permite aumentar o tamanho da área destinada ao código-fonte


em detrimento área de visualização. Para retornar ao padrão inicial, bastar clicar no botão
de restauração, que aparece no lugar do primeiro logo após a expansão.

Expansão Restauração

7
A tela passará a se apresentar da seguinte forma:

Área de visualização escondida.

Principais Botões do Depurador:

Permitem a visualização e manutenção de componentes do programa e do depurador


do ABAP.

8
 Campos: é a tela inicial do depurador, aquela onde está a Área de Visualização.
É nessa tela que visualizamos as estruturas unidimensionais.

A área de visualização permite que tenhamos acesso ao conteúdo dos


principais componentes do programa, como variáveis de usuário, constantes,
estruturas, tabelas internas, variáveis de sistema, entre outros.
Para visualizá-lo, basta digitar o nome do componente ou dar duplo-clique
nele.
Até oito componentes podem ser investigados. Os botões de paginação
permitem o avanço ou o retrocesso de componentes. Podemos navegar por página
ou por item individualmente. Na figura mostrada abaixo, os botões Componente
Anterior e Página Anterior estão ocultos e estarão disponíveis assim que a
avancemos na paginação.
O conteúdo dos componentes do programa, com exceção das constantes,
pode ser alterado. Basta informar o novo valor e clicar no botão de Gravação. Tal
botão pode ser suprimido pelo botão Eliminar Gravação.
A quantidade de entradas de uma tabela interna pode ser visualizada
acrescentando-se, ao final de seu nome, abre e fecha colchetes ([]). A tabela i_mara
tornar-se-ia i_mara[].

9
Próximo componente
Próxima página

Valor do componente
Nome do componente
Elimina botão de gravação

Botão de gravação

Nome da tabela interna Quantidade de entradas (1, no caso)


Cada entrada ocupa 4 bytes

Para visualizar um campo individualmente, bem como sua definição, basta


dar um duplo-clique nele. Uma tela como a mostrada abaixo aparecerá.

10
Definição do campo
Conteúdo

11
 Tabela: permite a visualização e manutenção das tabelas internas.

A área de visualização permite que tenhamos acesso ao conteúdo das tabelas


internas.
Para visualizar uma tabela, basta digitar seu nome ou dar duplo-clique nela.
Lembre-se de que o botão Tabela tem de estar pressionado. Para visualizar mais
código-fonte em detrimento da quantidade de entradas da tabela interna, basta clicar
no botão que comprime a área de visualização.
A entrada atual pode ser modificada pelas teclas de rolagem (Ctrl-Page Up,
Ctrl- Page Down, Page Up e Page Down) ou digitando seu índice.
O conteúdo dos campos da tabela interna pode ser alterado. Basta clicar na
coluna da entrada que se deseja alterar, informar o novo valor e clicar no botão
Modific..
Para inserir novas entradas logo acima de onde está o cursor, basta clicar no
botão Inserir, informar o conteúdo da coluna atual e teclar Enter. Os valores das
outras colunas terão de ser alimentados individualmente via botão Modific..
Para inserir novas entradas no final da tabela interna, basta clicar no botão
Anexar, informar o conteúdo da coluna atual e teclar Enter. Essa é a única maneira
de inserir entradas numa tabela interna vazia. Os valores das outras colunas terão de
ser alimentados individualmente via botão Modific..
Para eliminar entradas da tabela interna, basta clicar na entrada que se deseja
eliminar e clicar no botão Eliminar. Não há confirmação e a exclusão é definitiva.

12
Nome dos campos
Índice da
entrada Nome da tabela interna
atual
Comprimir a área
Tipo da tabela de visualização

Insere entrada no
final da tabela

Insere entrada acima

Modifica conteúdo
Elimina entrada

13
Área de visualização comprimida.
Restaurar a área de visualização

Os botões de navegação permitem o avanço ou retrocesso pelas colunas


(campos) da tabela interna.

Última coluna
Próxima coluna
Coluna anterior

Primeira coluna

Também é possível exibir o conteúdo de uma coluna digitando seu nome em


qualquer local da linha que aparece logo acima do cabeçalho da tabela e que contém
sua estrutura.

Estrutura da tabela interna

14
Para visualizar o cabeçalho ou uma entrada individualmente, basta dar um
duplo-clique no ícone de cabeçalho ou no índice correspondente, respectivamente.
Uma tela como a mostrada abaixo aparecerá. Nesse exemplo, a tabela interna
chamada content só possui um campo, de nome line, do tipo caracter e com 72
posições.

15
 Ptos Parada: permite a visualização e eliminação dos pontos de parada. Para
navegar pelos pontos definidos, utilizamos os botões de paginação do canto
inferior esquerdo da tela. Um duplo-clique elimina o ponto de parada.

Botões de paginação Quantidade de saltos

Um ponto de parada pode ser do tipo:


 simples: definido para uma linha específica; (1)
 de instrução: definido para uma instrução; (2)
 de evento: definido para um evento; (3)
 de módulo ou procedimento; (4)
 de função: definido para uma função; (5)
 de exceção: definido para as exceções do sistema (comando raise); (6)
 watchpoint: definido para uma ou mais condições. Não é exibido por
esse botão.

Se a quantidade de saltos for informada, o respectivo ponto de parada só


estará ativo após quantidade-de-saltos vezes.

16
Os pontos de parada são criados pela opção de menu Ponto de Parada ->
Ponto de parag. em. Uma tela como a mostrada abaixo aparecerá. Bastará escolher
o tipo desejado e informar o parâmetro exigido.

17
 Watchpoints: permite a visualização e manutenção dos watchpoints.

Os watchpoints são pontos de parada condicionais, ou seja, a parada só é


feita de determinada condição for satisfeita. Eles estão limitados a um total de 5
(cinco).
Para adicionar novos watchpoints , basta clicar no botão Criar. Uma tela
como a mostrada abaixo aparecerá. Experimente fazer isso com o cursor no campo
ou variável alvo do watchpoint.

18
Para alterar um item que já exista, basta clicar no botão Alterar.
Para eliminar o watchpoint, basta clicar no botão Excluir. Não há
confirmação e a exclusão é definitiva.
Para indicar uma relação de união (ou) ou de intersecção (and) entre os
watchpoints definidos, basta clicar no botão de rádio correspondente.
Se a comparação tiver de ser feita com um campo ou mesmo com uma
variável, basta marcar o checkbox Campo de comparação.
No final da tela, poderemos visualizar o último watchpoint alcançado, ou
seja, aquele que levou à última parada. Serão mostrados o programa, o campo e o
seu valor.
Sempre que a execução parar por causa de um watchpoint, seremos avisados
pela mensagem “Watchpoint foi alcançado”.

Operadores relacionais

Último watchpoint alcançado

Criar

Excluir

Alterar

19
 Chamadas: permite a visualização de toda a hierarquia de chamadas a
procedimentos e eventos do programa. Funciona como um histórico, exibindo
todo o caminho percorrido até o momento com relação ao ponto de parada.

Um duplo-clique numa linha válida permite a navegação até o código do


procedimento/evento.

20
 Síntese: permite a visualização de todos os procedimentos e eventos do
programa.

Um duplo-clique numa linha válida permite a navegação até o código do


procedimento/evento, exatamente igual ao que foi dito para o botão Chamadas.

21
 Opções: permite a ativação de opções avançadas de depuração. A explicação
desses itens não faz parte do objetivo desse curso.

22
Definição de ponto de parada em programa (SE38)

É possível fazer um ponto de parada numa linha de código específica através do


editor ABAP. O ponto em si é definido clicando-se na linha em que se deseja que o
programa pare e, em seguida, no botão Stop.
No caso de um programa acessado por uma transação, utilize a opção de menu
Sistema -> Status para saber seu nome. Para exibir o código-fonte sem precisar acessar
diretamente a SE38, dê um duplo-clique no nome do programa.

Para ter certeza de que o ponto de parada será obedecido, pressione Ctrl-F3 ou
acesse a opção de menu Programa -> Gerar. Se o programa já estiver em execução,
lembre-se de recomeçá-lo.

23
Botão Stop Ponto de parada

24
Para visualizar os pontos de parada, acesse a opção de menu Utilitários -> Pontos
de Parada -> Exibir. Nela é possível navegar para eles ou elimina-los.

25
Recursos sem acesso via botões

Exibição de Listas:

Listas podem ser exibidas mesmo antes de estarem concluídas pela opção Saltar ->
Exibir lista. A opção de menu somente estará habilitada se a montagem de uma lista estiver
em curso.

(Des)Ativação de Pontos de Parada:

Os pontos de parada podem ser desativados sem que sejam necessariamente


retirados do programa. Esse processo pode ser individual ou coletivo, para todos os pontos
de parada do programa. A ativação/desativação aplica-se somente àquela sessão.
Para a (des)ativação individual, a opção é Ponto de Parada -> Desativar / ativar.
Para desativar todos os pontos de parada do programa, a opção é Ponto de Parada
-> Desativar todos.
Para ativar novamente todos os pontos de parada, a opção é Ponto de Parada ->
Ativar tudo.
Os watchpoints não sofrem a ação dessas opções.

26
Visualização da Área de Memória:

A área de memória, atualizada pelos pares de comandos export/import e set/get,


pode ser visualizada pela opção Saltar -> Sistema -> Área do sistema. Exibida uma tela
como a mostrada abaixo, dê um duplo-clique em MEMORIES, no primeiro caso, e em
SMEM no segundo.

27
Controle de Transação:

É possível forçar a gravação das atualizações pendentes no banco de dados pela


opção Depuração -> Banco de dados -> Commit (desbloquear).
Para descartar as atualizações pendentes, a opção é Depuração -> Banco de dados -
> Rollback.
Não há confirmação e ambas as ações são definitivas.

28
O botão direito do mouse

Muitas das opções de que falamos podem ser rapidamente acessadas com um
simples clicar de botão direito do mouse. Com isso, uma tela como a mostrada abaixo
aparecerá. Basta clicar na opção desejada para executá-la.

29
Mapeamento de transações

O parâmetro mode pode permitir a exibição das telas que estão sendo mapeadas pelo
comando call transaction. Normalmente, uma variável de nome v_mode é passada ao
comando indicando o modo como deve se comportar. Ela pode assumir os seguintes
valores:

o N: não há exibição de tela;


o A: todas as telas são exibidas;
o E: só há exibição de tela quando uma mensagem de erro é disparada.

Assim, basta escolher a opção adequada, atribuir o valor correspondente à variável


v_mode, ou similar, antes da execução do comando e teclar F8 para prosseguir. Caso uma
constante seja passada como parâmetro no lugar de v_mode, não poderemos mudar o
comportamento do comando.
No mapeamento propriamente dito, lembre-se de não alterar o valor do campo de
comando. Caso isso seja imprescindível, copie esse valor para a área de transferência, faça
o que for necessário e depois retorne-o ao campo de comando. Isso poderá evitar que o
SAP se perca durante o mapeamento.

Conteúdo das tabelas do banco de dados (SE16)

Dentro da transação SE16, a variável code permite a manutenção de uma tabela. Ela
pode assumir os seguintes valores:

 SHOW (padrão): permite apenas a visualização da entrada;

30
 EDIT: permite alteração das informações que não compõem a chave
primária;

 INSR: permite inclusão de novas entradas. O botão Reinicializar limpa o


conteúdo de todos os campos;

 ANVO: permite alteração das informações que compõem a chave


primária. Mantém a entrada original e cria outra com as alterações
efetuadas. Permite duplicar várias entradas, diferentemente de INSR.

31
 DELE: permite exclusão de entradas.

Assim, basta escolher a opção adequada, selecionar as entradas que serão afetadas,
entrar no processamento individual com um duplo-clique, ligar o debug, atribuir o valor
correspondente à variável code antes da execução do comando e teclar F8 para prosseguir.

IMPORTANTE: Manutenções em tabelas do banco de dados feitas dessa forma


sempre serão arriscadas, principalmente se efetuadas em tabelas standard. Tenha absoluta
certeza do que você está fazendo antes de adotar essa solução.

32
Exercícios

1. Acesse a transação ZCDebug.


Sem ir à SE38, visualize o código-fonte.
Utilizando o menu, faça um ponto de parada na linha 387.
Como colocaria o mesmo ponto de parada sem acessar o menu?
Execute o programa com a variante Curso Debug.
Explique as diferenças de conteúdo e de visibilidade entre as tabelas internas
i_mara e i_mara2 no final da execução do procedimento.
Utilizando a área de visualização, diga descubra quantas entradas essas tabelas
internas possuem?
Limpe o conteúdo da área de visualização.

2. Acesse a transação ZCDebug.


Execute o programa com a variante Curso Debug.
Ligue a ferramenta de depuração.
Crie um watchpoint. Uma parada deve ser feita quando o campo matnr da tabela
interna i_ekpo tiver o valor 000000000000036200.
Prossiga com a execução até o final.

3. Acesse a transação ZCDebug.


Execute o programa com a variante Curso Debug.
Ligue a ferramenta de depuração.
Crie um ponto de parada na instrução call function. Execute-a como se fosse um
único comando.
Mostre o histórico de execução.
Clique no botão Campos. Elimine a área de visualização. Restaure-a em
seguida.

4. Acesse a transação ZCDebug.


Execute o programa com a variante Curso Debug.
Ligue a ferramenta de depuração.
Altere o conteúdo do parâmetro p_aedat para outra data válida.
Diminua a área de visualização. Restaure-a em seguida.

33
5. Acesse a transação ZCDebug.
Execute o programa com a variante Curso Debug.
Ligue a ferramenta de depuração.
Crie um ponto de parada logo após o comando select que alimenta a tabela
interna i_ekpo. Prossiga com a execução até o final.
Localize o pedido 4500001701. Altere seu material 354-9 para 3620-0.
Sem utilizar nem a área de visualização, diga quantas entradas foram
recuperadas por esse comando select.
Inclua uma nova entrada na tabela interna i_ekpo. Os valores para o pedido e
para o material devem ser 4500001700 e 000000000000011274, respectivamente.
Deixe em branco os demais campos.
Mostre, em forma de estrutura, a primeira ocorrência de i_ekpo.
Mostre todos os pontos de parada.

6. Acesse a transação ZCDebug.


Execute o programa com a variante Curso Debug.
Ligue a ferramenta de depuração.
Crie um ponto de parada no comando loop que imprimirá a lista. Prossiga com a
execução até o final.
Continue o processamento passo a passo até que dois pedidos sejam impressos.
Exiba a lista parcialmente construída.
Retorne ao código-fonte e avance até o final do procedimento (form) atual.

7. Acesse a transação ZCDebug.


Execute o programa com a variante Curso Debug.
Ligue a ferramenta de depuração.
Crie um ponto de parada no evento end-of-selection. Prossiga com a execução
até o final.
Procure pela cadeia read.
Continue a pesquisa.
Retorne à instrução que está para ser executada.

8. Acesse a transação SE16.


Consulte todas as entradas da tabela ztsd_ifacepreco.
Mude a data de atualização do escritório de venda 1510 para a data de amanhã.

9. Acesse a transação ZCDebug.


Execute o programa com a variante Curso Debug.
Por que a lista está incorreta?
Depure o programa e identifique o erro.

34

Você também pode gostar