You are on page 1of 98

Depuração de Erros e Análise de

Performance
Tópicos
•Progress Debugger;
•New debugger 4gl;
•Depuração em Smart Objects;
•Depuração em Thin Templates;
•Depuração em Programas Web;
Tópicos

•Progress Kbase;
•Dynatext;
•Erros de Sistema Operacional;
•Performance;
Progress Debugger

Para chamar o progress debugger no meio do código a ser executado:


Debugger:initiate().
Debugger:set-break().
Progress Debugger
Qual é o
programa

Código do
Programa
Botões
Padrão
Inserir
comandos
progress

Área de Display
Progress Debugger: Navegação

Toda a navegação é
feita através dos
botões
Progress Debugger: Descrição dos
comandos
•Run : Utilizado para rodar outros programas após o debugger estar
iniciado;
•Step : Com este comando além de você executar a linha de comando
corrente, se este estiver rodando uma procedure você entrará
nesta procedure e verá sua execução linha à linha.
•Break : Você pode inserir novos pontos de parada no código a ser
depurado.
•Up : Com o comando up você pode se mover à um determinado
número de triggers, procedures internas, triggers e procedures
externas.(à cima)
•Disp : Utilizado para mostrar valores de variáveis e atributos.
Progress Debugger: Descrição dos
comandos
•Cont : O comando cont continua a execução do código que você está
depurando.
•Next : Com o next você executa a linha corrente indo para à próxima
sem entrar em outras procedures chamadas pelo programa.
•Stack : Mostra a chamada da procedure acompanhando os valores
passados como input parameters.
•Down : Com o comando down você pode se mover um determinado
número de triggers, procedures internas e procedures
externas.(abaixo)
•Exit: Com o exit você sai do progress debugger.
Progress Debugger: Informações
úteis
Para que você possa utilizar o progress debugger você deve estar
atento a alguns pontos importantes:
•Você deve utilizar o progress debugger apenas em fontes;
•Quando for utilizar o progress debugger procure não utilizar
rodando o programa direto do editor ou do app, pois o mesmo pode
ficar sem sincronia;
New debugger 4gl

No progress 9.1d existe uma nova versão do


debugger.

Principais Diferenças:

•Interface mais amigável;


•Possibilita uma visão mais apurada do
código a ser depurado;
New debugger 4gl
New debugger 4gl: Botões

Abrir Step Stop


Arquivo Help
out

Step in Continue
New debugger 4gl: Lista de
Informações

Novidade no novo debugger, serve para listar as


variáveis, tabelas, temp-tables e parâmetros definidos ou
utilizados no programa a ser depurado.
New debugger 4gl:
Acompanhamento

Valor atribuído a
variável ou atributo.
(Modificável)

Área de onde você insere as variáveis ou atributos que você


deseja monitorar.
New debugger 4gl: Adicionando um
valor para acompanhamento

Com este botão você


Aqui você marca a insere a informação
informação que você marcada na área de
quer acompanhar. acompanhamento.
Depuração em Smart Objects
Smart Objects: Informações Básicas

Para poder depurar erros nos programas


construídos em smart objects você deve conhercer
as procedures que cada interação do programa
executa:

•Adicionar registro;
•Alterar registro;
•Eliminar Registro;
•Salvar registro;
•Cancelar registro;
•Copiar Registro;
•Navegar entre os registros;
Smart Objects: Informações Básicas
Deve-se salientar que o programa smart object tem
suas procedures chamadas através do broker.
Exemplo:

OOObroker
brokerVerifica
panel tem
avisa asos
link de A query
O panel O broker
viewers
links dade é notificado
que asendo
query, query
Quando se clica navigation com a query, posiciona
p-navega tem e
que verifica
navegou
a mesmae os
as links
mesmas
tem do
link no
no next o mesmo sendo assim o broker
mostram panel.
link de a aoquery
novotodasregistro
deavisa
record com as próximo
executa que a registro e
navigation posicionado pela query.
procedure com a viewers
mesma do deve programa
navegar
notify avisa o
(inputquery
“get-next”) para o próximo broker
registro.
Passos para depurar um Smart
Object
•Você deve isolar o objeto que está apresentando o
erro;

•Após isolar o objeto que esta apresentando o erro


você deve isolar a procedure que está apresentando
o erro;

•Verificar se os links do programa estão corretos;

OBS: Vários erros podem aparecer se os links não


forem criados corretamente. (Verificar os links
necessários em cada template no manual de
padrões do EMS 2)
Smart Object: Isolando o Objeto

Para isolar o objeto você pode utilizar as procedures


Adm que existe em cada objeto.

Estas procedures podem existir em mais de um


objeto, como por exemplo adm-assign-record que é
executada por todas as viewers, através do link de
group-assign.

Outro fato importante é conhecer as procedures que


cada interação do programa executa.
Smart Object: Isolando o Objeto

Após criada a procedure override a mesma terá um


run dispatch passando como parâmetro a procedure
que você customizou.
Exemplo:

• Run dispatch in this-procedure (input “assign-record”).

Vantagem : Agora você pode colocar mensagens


antes ou depois do run dispatch e ou
chamar o progress debugger para
verificar se o erro ocorre nesta
procedure.
Smart Object: Isolando a Procedure

Basicamente para isolar a procedure com erro


deve-se fazer o mesmo processo feito
anteriormente para isolar o objeto ou utilizar o
progress debugger.
Smart Objects: Depurando
procedures definidas em includes
Existes algumas procedures que o programa
executa que não estão disponíveis no fonte
do programa e sim em includes que são
incorporadas no momento da compilação.
Smart Objects:Depurando
procedures definidas em includes
• As includes que definem procedures nos
objetos sempre são chamadas no main block
do programa ou no method libraries;

•Estas includes são utilizadas por todos os


programas e quando você for fazer uma
alteração deve-se gravar a mesma de forma
local para não interferir em outras aplicações;
Smart Objects:Depurando
procedures definidas em includes
Method
libraries

Procedure
settings

Includes
padrão do
programa
Smart Objects:Depurando
procedures definidas em includes
Escolha aqui para
Edit code ver o main block
do programa
Include
padrão
Smart Objects:Depurando
procedures definidas em includes
As includes utilizadas pelos smart objects
estão nos seguintes diretorios:

•X:\ems20por\include;

•X:\ems20por\src\adm\method;

•X:\ems20por\src\adm\template;
Depurando Thin Templates

Diferenças em relação a Smart Objects:

•Arquitetura diferente;

•Mais facilidade na depuração de erros;

•Lógica de negócio concentrada em um


programa à parte (dbo);
Depurando Thin Templates

Thin templates são construídos com objetos


progress puros, ou seja todo o código está
concentrado em um único programa, diferente do
Smart, que é composto de vários programas
independentes.
Depurando Thin Templates

•Quando você faz um programa em thin


template, basicamente você trabalha na
sessão de definitions do programa alterando
seus pré-processadores;

•Como o mesmo é um único programa você


pode compilar o mesmo com “preprocess” e
depurar toda a sua lógica em um único .w;
Depurando Thin Templates

Quando for depurar um programa thin


template você deve estar atento à alguns
detalhes:
•Sempre verifique se os pré-processadores
estão definidos corretamente;(Caso haja
alguma dúvida sobre isso consulte o manual
x:\ferramentas\ddk2000\manual\ManualthinTe
mplates.doc)
Depurando Thin Templates

•Devemos também salientar que o erro nem


sempre esta no programa, podendo estar no
dbo que o programa utiliza;

•Os thin templates como os Smart Objects


também tem includes que definem
procedures;
Depurando Thin Templates:
Depurando procedures em includes
Cada tipo de thin template tem suas próprias
includes, exemplo:

Quando você constrói um maintenance, as


includes que o mesmo utiliza estão na pasta
x:\ferramentas\ddk2000\maintenance.

Estas includes são utilizadas somente por


este template.
Depurando Thin Templates:
Depurando procedures em includes
Da mesma forma que os Smart Objects os
thin templates também fazem referência a
estas includes no Main Block e no Method
Libraries.

Include Include
Depurando Thin Templates:
Depurando procedures em includes
Conforme já visto anteriormente em Smart
Objects se você deseja depurar o código
destas includes você deve copiar as mesmas
para não interferir em outras aplicações.

Caso não queira fazer isto você também pode


utilizar a compilação com “preprocess”.
Depurando Thin Templates:
Compilando com “preprocess”
Para compilar o programa com “preprocess”
você deve utilizar a seguinte sintaxe:

•Compile c:\tmp\teste.w preprocess c:\tmp\teste1.p.

Com isto você terá no programa teste1.p o


programa teste.w com todas as includes
incorporadas no seu código fonte.
Depurando Thin Templates

Todas as includes utilizadas em thin


templates estão localizadas na pasta:

“x:\ferramentas\ddk2000”.

Sempre dentro da pasta com o nome do


template.
Depuração de erros na web

Para depurar erros em programas web você deve


estar ciente de algumas informações importantes:

•Diferente da depuração de programas client/server


os programas web são mais difíceis de depurar, pois
os mesmos não são executados em sua estação de
trabalho e sim em um servidor. (este conceito deve
estar claro para melhor entender a execução de um
programa web)
Como os componentes do WebSpeed trabalham:

1. URL 4. Encaminha a requisição 5. Consulta o conjunto de agentes


do serviço de aplicação WebSpeed e repassa a
Browser requisitado para o broker requisição para um agente livre
identificado pelo Name
Server

7. Html

Web Server Messenger Ubroker

Ocupado !
2. Requisita por um
broker que atenda
o serviço de
Server Ocupado !
aplicação solicitado
Server
Ocupado !
Server
Livre !
Name Server
Server

3. Seleciona o broker
que suporta a requisição
do serviço de aplicação 6. Executa a requisição e cria Conexão
e notifica o messenger uma página html que retorna Client-server
qual broker utilizar ao Messenger Progress 4GL
Depuração de erros na web

•Deve-se ter em mente que um programa web


pode apresentar erros que não sejam erros
progress;

•Como em thin templates o programa web


deve fazer acesso a dados através do dbo;

•Os erros progress na web só podem


acontecer nos dois eventos que um programa
web executa GET/POST;
Depuração de erros na web
Depuração de erros na web:
Tipos de erros
Os programas web podem apresentar outros
erros além de progress:

•Erros no html;

•Erros em códigos javascript;


Depuração de erros na web:
Tipos de erros
O erro no html pode provocar um erro
progress, exemplo:

Se você definir um selection List no html e


esquecer de fechar a tag, e houver outros
campos html após a definição do selection
list o mesmo ira apresentar erro progress.
“Invalid widget-handle. Not initialized or points to
a deleted widget. (3135) “
Depuração de erros na web:
Tipos de erros
Os erros em javascript são mais fáceis de
identificar.
Quando ocorre um erro JavaScript o
navegador irá avisar com um ícone de alerta,
exemplo:

Este é o aviso que


ocorreu erro Javascript
Depuração de erros na web:
Tipos de erros
Para saber onde o erro esta acontecendo e
qual é o mesmo basta dar duplo click no
ícone.

Aqui está a
linha e caracter
que está
causando o
Duplo click no erro.
ícone
Depuração de erros na web:
Tipos de erros
Devemos salientar também a importância de que
códigos javascript são case sensitive ou seja letras
maiúsculas são diferentes de minúsculas, exemplo:
<html>
<script languge=javascript>
function teste()
{
alert(“função teste”);
}
</script>
<Body>
<input type=“button” name=“teste” value=“teste”
onClik=javascript:Teste()>
</body>
</html>
Depuração de erros na web:
Tipos de erros
No exemplo anterior quando o usuário clicar
o botão teste apresentará erro pois a função
chamada no onClick do botão não existe.

Teste != teste;

<input type=“button” name=“teste” value=“teste”


onClik=javascript:Teste()>
Depuração de erros na web:
Tipos de erros
Quando o programa web apresenta erro
progress na execução do programa o servidor
webspeed apresenta uma tela amarela ao
usuário:
Depuração de erros na web:
Tipos de erros
Também pode ser retornado a tela html em
branco muito comum quando a um registro
locado e o servidor webspeed não consegue
emitir o frame da mensagem de registro
locado do progress.

Nestes casos o erro pode ser observado no


arquivo de log do serviço em que você está
rodando o programa.
Depuração de erros na web:
Tipos de erros
Também pode ser retornado erro direto no :
Html, exemplo:
Depuração de erros na web: Meios
de se depurar um programa WEB
O programa WEB é composto por Procedures
que são executadas a partir da procedure
principal do programa process-web-request.

Todas as procedures do programa web são


rodadas a partir desta, no eventos de
GET/POST do programa.
Depuração de erros na web: Meios
de se depurar um programa WEB

Procedure Process-web-request
Depuração de erros na web: Meios
de se depurar um programa WEB
Quando for depurar um programa WEB
lembre-se que basta você depurar esta
procedure para isolar o problema, pois é ela
que vai disparar as outras procedures.
Depuração de erros na web: Meios
de se depurar um programa WEB
O meio mais utilizado para depurar erro em
um programa web é a criação de um log de
erro, exemplo:

Jogue com o comando output to <nome do


arquivo>, e depois utilize o disp ou put para
jogar mensagens neste log para saber por
onde o programa esta passando.
Depuração de erros na web: Meios
de se depurar um programa WEB
Outro meio de se depurar um programa web é
colocar mensagens ´sem view-as nas linhas
de código que serão depuradas, as
mensagens serão jogadas no arquivo de log
do serviço web.

Também pode se jogar as mensagens para o


html para acompanhar na própria execução
do programa com o pré-processador {&out}
‘<informação>’.
Depuração de erros na web: Meios
de se depurar um programa WEB
Outra forma útil que pode ser utilizada o
progress debugger, mas esta opção só
funcionara se o serviço web estiver na
rodando na sua máquina.
Depuração de erros na web:
Ferramentas que auxiliam
Existem ferramentas que podem ser úteis na
depuração de erros na web, a principal delas é o
workshop do serviço web, que além de mostrar todo
o ambiente em que o serviço esta rodando ele
também tem alguns utilitários que facilitam o seu
trabalho, principalmente em serviços que estão
localizados em outras máquinas.

Para você poder utilizar o workshop o serviço que


você esta rodando deve estar configurado como
desenvolvimento.
Depuração de erros na web:
workshop
Depuração de erros na web:
workshop
O workshop nada mais é do que um programa web
executado da mesma forma que os programas do
produto.

Com ele você pode verificar muitas coisas, tais


como:

•Variáveis dos agentes;


•Bases conectadas;
•Objetos persistentes na sessão;
•Propath;
•Status dos bancos conectados;
Depuração de erros na web:
workshop
A navegação do workshop é feita toda à partir
do seu menu a esquerda.

Menu de
navegação do
workshop
Depuração de erros na web:
workshop
O workshop também é um ambiente completo
para se desenvolver programas web, nele
você encontra ferramentas como editor para
programar, compilador, editor de textos,etc...
Depuração de erros na web:
workshop - Editor
Depuração de erros na web:
workshop – File tools

Diretório em
que você está
posicionado
Com
Comooview run você
Filtro dos arquivos vocêdopode
pode diretório
rodar
que você estávisualizar
posicionado.
programas o web
Com o file tools você pode editar
Comconteúdo
Com
o Compile
Com
o Extract
o delete
de
textos (arquivos de logs), rodar
você você
podevocê
arquivos. pode pode
programas,
NavegaçãoArquivos
entre os diretórioscompilar
do programas,
compilar
extrair
deletar
( Arquivo
encontrados com fontes
ode
base .off
arquivos
logdo
deletar programas
servidor. enoextrair .off.
direto
html
no direto
servidor
do serviço)
no filtro de programas. no web
servidor
servidor
web web
Depuração de erros na web:
workshop – Propath

Com o propath você pode procurar


programas ou verificar como está
montado o ambiente do serviço
Progress Kbase

•O que é o progress kbase?

•Como Utilizar?

•Onde Baixar?
Progress Kbase: O que é o progress
kbase?
O progress kbase é uma base de
conhecimento progress que nos da solução
para algumas situações e erros já
conhecidos.

Existem duas formas de utilizar o progress


Kbase, uma delas é baixar a versão
client/server da página da progress ou utilizar
à própria página da progress que
disponibiliza o kbase para consultas.
Progress Kbase: Como utilizar o
progress kbase?

Número do Descrição do
erro progress erro Progress

Informações
do kbase
Kb encontrado
Encontrado
Progress Kbase: Onde baixar?

Para utilizar o Progress Kbase client/server


você deve baixa-lo do site:
http://www.progress.com/support/kb/kb_download.htm

Caso você queira utilizar o Progress Kbase


disponível para consulta no site da Progress:

http://www.progress.com/services/support/cgi-bin/techweb-kbase.cgi/webkb.p
Dynatext

Dynatext é a ferramenta para consultar a


documentação eletrônica do progress.

Ferramenta muito útil para consulta de


comandos e as mais diversas funções do
progress, com exemplos, explicações, etc...
Dynatext

Área com os
tópicos da
documentação

Procura por
Palavras Tópicos encontrados na
Chaves documentação escolhida com o
número de hits da pesquisa
Dynatext

Detalhamento
dos tópicos com Palavra chave para Palavras encontradas
o número de pesquisa no texto da
hits documentação
Erros de Sistema Operacional

Existem erros que são apresentados que são


causados pelo Sistema Operacional;

Estes erros ocorrem geralmente na


comunicação da ferramenta de
desenvolvimento com o Sistema Operacional;
Erros de Sistema Operacional

Para entender melhor os erros de Sistema


Operacional causados na interação da
ferramenta de desenvolvimento com o
Sistema Operacional perceba a seguinte
situação:
•Criar um arquivo .txt através do progress em
um diretório onde seu usuário de rede não
tenha a permissão adequada;
Erros de Sistema Operacional

Exemplo:

OUTPUT TO VALUE("\\vigoreli\distems2\exp201por\adm\teste.txt").
MESSAGE "".
OUTPUT CLOSE.

Se seu usuário não tiver a permissão de


gravação no diretório citado acima o Sistema
Operacional retornara um erro para o
progress que emitirá a seguinte mensagem:
Erros de Sistema Operacional

MensagemErro
de retornado pelo
erro Progress
Sistema Operacional
Erros de Sistema Operacional

Para verificar o número de erro operacional


retornado, você pode utilizar uma lista com
estes erros disponível no Progress Kbase nos
Kbases de Números:

•18343;
•18354;
Erros de Sistema Operacional

Kbase 18343:
Erros de Sistema Operacional

Podemos verificar o erro de Sistema


Operacional retornado através do Prompt nas
estações windows 2000 e Nt4:
Comando
C:\>net helpmsg <Número da mensagem
retornada>
Erros de Sistema Operacional
Performance
Devemos salientar ainda que existem
algumas aplicações que não contém
erros mas devem ser depuradas,
exemplos disto são programas que
apresentam problemas de performance
Performance: Tópicos

• Profiler;

• Ferramentas Auxiliares;
Profiler
Profiler: Introdução

•É uma ferramenta Não documentada e Não


suportada pela PROGRESS;
•Recurso que a PROGRESS disponibilizou
para localizar problemas de performance
dentro de programas, gatilhos, etc...;
•PROGRESS 8.2 ou superior;
•Verifica o tempo gasto linha-a-linha na
execução do programa
•Possui filtros que não contam o tempo gasto
com interações do usuário
Profiler: Como Funciona?

•Deve-se adicionar o parâmetro “-zprofile” na


sessão client, o qual indica o arquivo .pf que
conterá as informações do profiler;
•Trabalha sempre gerando o “Debug-List” do
aplicativo que estiver rodando;
•Monta uma curva ABC do tempo gasto na
execução do programa;
•Mostra o número de vezes que o comando é
executado;
•Possui uma base de dados especial;
Profiler: Parâmetros Necessários

Adicionar no atalho ou .pf o parâmetro -zprofile


c:\profiler\profiler.pf
O profiler.pf deverá conter as seguintes linhas:

•OUTFILE c:\profiler\prof.out
Indica o nome do arquivo que deverá ser gerado contendo os tempos
gastos.
•LISTINGS c:\profiler\dados
Indica o diretório onde deverão ser gravados os programas no formato
Debug-List.
•DESCRIBE “Descrição do Processo”
Contém a descrição dessa atualização.
Profiler: Tela Inicial do profiler

Resultados da Inserir nova Deletar


sessão sessão sessão
Profiler: Tela de Importação “.out”
Profiler: Visualização da importação

Na janela session summary o profiler mostrará todas as procedures


executadas na sessão.
Profiler: Visualização da importação

Com o este botão o mesmo abrirá a tela contendo os tempos


gastos na execução da procedure.
Profiler: Resultados da Procedure

Nesta tela contém os detalhes da execução da


procedure.
Profiler: Detalhamento da tela de
Resultados

Blocos de
Estatísticas
Código

Linhas de
Tempos Código e
Gastos Tempos
Gastos

Rotinas que Rotinas


Executam Programa Executadas pelo Programa
Profiler: Verificando Tempos nos
programas web
O profiler pode ser usado também nos
programas web.

As configurações para utilizar o profiler são


as mesmas do client-server, mas as
informações com os tempos de execução
somente serão geradas quando o serviço for
derrubado.
Ferramentas Auxiliares

Existem algumas ferramentas que auxiliam os


programadores a prevenir problemas de
performance.
Veremos algumas ferramentas;

•Compilação com XREF;


XREF: Por que utilizar?

Em nosso contexto podemos utilizar a


compilação com XREF para analisarmos os
acessos a dados que o programa faz e
verificar se os acessos estão fazendo
utilização dos índices ou estão lendo todos
os registros da tabela.
Utilizando o XREF

O XREF é uma opção de compilação, muito útil para


analisar o programa construído;
Como utilizar:

Compile <nome programa> XREF <arquivo onde


será gerado as informações>.

Exemplo:

COMPILE c:\tmp\teste1.p XREF c:\tmp\teste.p


Exemplo de utilização do XREF

Vamos imaginar o programa teste1.p com o seguinte


código:

FOR EACH customer WHERE


CUST-NUM <> 10 NO-LOCK:
END.

Se você compilar a lógica anterior com a opção


XREF você obterá o seguinte resultado:
Exemplo de Utilização do XREF
...
c:\tmp\teste1.p c:\tmp\teste1.p 1 SEARCH
sports.Customer Cust-Num WHOLE-INDEX
...
Fim

You might also like