O objeto error

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

O objeto error

Mensagem 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 ?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20453
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

O objeto error

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

O objeto error

Mensagem 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
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2824
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP
Curtiu: 2 vezes

O objeto error

Mensagem 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().
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

O objeto error

Mensagem 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.
Responder