Prevenção e diagnóstico de loops em AdvPL
Torna explícitos o avanço, a condição de saída e o limite de um laço.
Visão geral
Antes de otimizar um laço, identifique o que muda a condição de continuidade. Em consultas, Eof e DbSkip devem atuar no alias da consulta mesmo quando o corpo posiciona outra tabela. Um Loop pode saltar o avanço colocado no fim do corpo; prefira organizar o fluxo para que cada caminho avance ou encerre. O exemplo usa memória e um limite de trabalho: a condição de negócio encerra antes do teto. Para diagnosticar, registre contadores e identificadores técnicos sem dados pessoais, compare o último progresso e procure tentativas sem limite, travas e validações reentrantes. (Fontes: refs. 1–2.)
Exemplo comentado
#Include "Protheus.ch"
User Function Ed597()
Local nPasso := 0
Local nLimite := 10
// O incremento ocorre em toda passagem; o teto limita o trabalho.
While nPasso < nLimite
nPasso++
If nPasso == 3
Exit
EndIf
EndDo
ConOut(nPasso)
Return NilImprime 3: há progresso e saída explícitos. O teto não substitui tratamento de erro ou cancelamento. Em revisão: exemplo editorial não compilado nem executado em Protheus. Conferir includes, release, RDD e contexto antes de homologar.
- Um contador não interrompe uma chamada interna bloqueada. Meça o trecho lento e confira o alias de cada operação.
- Em revisão: exemplo editorial não compilado nem executado em Protheus. Conferir includes, release, RDD e contexto antes de homologar.

Comentários
Ainda não há comentários aprovados.
Entre com Google ou Microsoft para comentar.