Página 1 de 1

O objeto error

Enviado: 14 Jan 2019 16:29
por Vlademiro
Amigos, estou com uma dúvida no objeto erro que é gerado quando uma exceção é lançada. Eu estou tentando pegar a linha do erro mas não descobri como fazer.

Até agora tenho o seguinte :


oErr:Description
oErr:operation
oErr:GenCode
oErr:Args
oErr:subsystem
oErr:subcode

Não teria algo como oErr:Line ?

O objeto error

Enviado: 14 Jan 2019 17:52
por JoséQuintas
Sim.

ProcName( n ) e ProcLine( n )

Sendo que pode pegar toda a pilha de procedures/functions.

Código: Selecionar todos

nCont := 2
DO WHILE ! Empty( ProcName( nCont ) )
   ? ProcName( nCont ), ProcLine( nCont )
   nCont++
ENDDO
Uma olhada na errorsys do Harbour pode ser útil.

https://github.com/vszakats/harbour-cor ... errsys.prg

O objeto error

Enviado: 15 Jan 2019 07:56
por Vlademiro
Quintas, obrigado pelo retorno, mas desse jeito não dá certo. Deixa eu colocar mais um detalhe que eu esqueci de dizer:

Eu estou desenvolvendo um programa baseado no httpd que veio no contrib. Esse programa, ao que me consta, já vem com a sua errorsys configurada e eu não quero mecher nela. Eu queria a linha do erro a partir do objeto error. Vou fazer um rascunho abaixo :

Código: Selecionar todos

begin sequence with __BreakBlock()

     Aqui minha rotina

recover using oErr

      Aqui eu pegaria o erro
      oErr:Description , etc.

      Eu queria uma forma de pegar a linha. 
      Se eu botar PROCLINE aqui ele vai dar essa linha e não a linha do erro. 
  

end sequence
Teria algum local onde eu pegasse os métodos da classe oErr ? A minha necessidade é a linha de onde o erro ocorreu. Algo tipo oErr:Line

O objeto error

Enviado: 15 Jan 2019 09:35
por Jairo Maia
Olá Vlademiro,
Vlademiro escreveu:Se eu botar PROCLINE aqui ele vai dar essa linha e não a linha do erro.
Se você não passar parâmetro retornará a linha da procedure corrente. Não sei como você está organizando sua função de erro, mas no caso de usar o ERRORSYS(), a posição 2 será a procedure que chamou a função ERRORSYS(), então se fizer:

Código: Selecionar todos

? ProcName( 2 )
? ProcLine( 2 )
Você terá exatamente a procedure e linha onde ocorreu o erro. A rigor, a procedure e linha que chamou a função atual, no caso o ERRORSYS().

O objeto error

Enviado: 15 Jan 2019 11:14
por Vlademiro
Esse é o problema Jairo, eu não estou usando o errorsys. Creio que para ter o número da linha o errorsys precisa entrar na jogada. Obrigado pelo retorno.