GARANTIR DESCONTO

Fórum Exception Tratamento de Erros #273079

18/03/2005

0

:D E ai galerinha blz espero

Estou montando a biblioteca de tratamento de erros e gostaria de gerar um log no tratamento.
neste log gostaria de colocar o procedimento de onde foi gerado o erro, o nome do arquivo e também a linha.
:shock:
pois é galera só que eu não sei como pegar estes dados automáticamente e na verdade nem sei se é possivel fazer isto.
:?: Tem como
No tratamento de erro saber qual procedure gerou o erro?
No tratamento de erro saber qual linha gerou o erro?
No tratamento de erro saber qual arquivo gerou o erro?

bem acredito questas perguntas não seja um desafio somente para mim..
caso vcs não saibam como fazer desta meneira qualquer sujestão de como fazer isto é bem vinda.


Mitsalito

Mitsalito

Responder

Post mais votado

18/03/2005

Era exatamente o que eu estava fazendo ... agora eu vou me preocupar somente em gerar o log e traduzir as mensgens.
Cara vou ganhar uma promoção por sua ajuda :D
Não sei nem o que te dizer ... se vc não este caminho das pedras to pra te falar que eu iria desinstala-lo e não teria visto aquilo ... muito bom excelente .... brigadão


Mitsalito

Mitsalito
Responder

Gostei + 1

Mais Posts

18/03/2005

Gandalf.nho

Existem componentes para isso, embora desconheça se existe um tão completo que não seja comercial. Dê uma pesquisada nesses sites de componentes: [url]http://delphi.icm.edu.pl/[/url] e [url]http://www.torry.net/[/url]


Responder

Gostei + 0

18/03/2005

Marco Salles

Pelo que eu entendi , Voce pode armazenar todo o erro que por ventura ocorra no seu aplicativo em um arquivo Text

Isto serve para voce :?: :?: :?:


Responder

Gostei + 0

18/03/2005

Mitsalito

O armazenamento e tratamento não é o problema eu queria é pegar também o nome da procedure e o numero da linha que executou o erro.
O Delphi tem alguma função que retorne o numero da linha? por exemplo.


Responder

Gostei + 0

18/03/2005

Massuda

Na [url=http://homepages.borland.com/jedi/jcl/]JCL[/url] (Jedi Code Library), tem uma unit chamada JclDebug que deve ser usada em conjunto com o mecanismo do JCL para captura de exceções. Nessa unit tem funções/procedures para determinar o nome do arquivo, da função/procedure, o número da linha.


Responder

Gostei + 0

18/03/2005

Mitsalito

esta unit está no delphi?


Responder

Gostei + 0

18/03/2005

Gandalf.nho

esta unit está no delphi?


Tem que ser baixada do link que o Massuda forneceu.


Responder

Gostei + 0

18/03/2005

Mitsalito

Cara vc num teria o nome das procedures que fazem isso para facilitar pro meu lado não?


Responder

Gostei + 0

18/03/2005

Mitsalito

Ou algum exemplo pois a biblioteca tem objeto pra caramba


Responder

Gostei + 0

18/03/2005

Gandalf.nho

tem uma unit chamada JclDebug que deve ser usada em conjunto com o mecanismo do JCL para captura de exceções. Nessa unit tem funções/procedures para determinar o nome do arquivo, da função/procedure, o número da linha.


Aí está o nome da unit


Responder

Gostei + 0

18/03/2005

Rômulo Barros

[color=darkblue:08b3091f45][b:08b3091f45]Veja se as funções MethodName e MethodAddres podem lhe ajudar:[/b:08b3091f45][/color:08b3091f45]

Link: [url]http://forum.clubedelphi.net/viewtopic.php?t=48275&highlight=[/url]

_____________________________________________
[b:08b3091f45][color=blue:08b3091f45]Utilize a Ferramenta de Pesquisa do Fórum[/color:08b3091f45][/b:08b3091f45]

Pesquisar pelos termos
_____________________________________________
[b:08b3091f45]Veja como[url=http://forum.clubedelphi.net/viewtopic.php?t=16976] OBTER RESPOSTAR RÁPIDAS[/url][/b:08b3091f45]
[b:08b3091f45]Veja as novas [url=http://forum.clubedelphi.net/viewtopic.php?t=59817]MUDANÇAS NA ESTRUTURA[/url] do site[/b:08b3091f45]
[b:08b3091f45]Leia sempre as [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]REGRAS DE CONDUTA[/url][/b:08b3091f45]


Responder

Gostei + 0

18/03/2005

Marco Salles

Voce consegui abrir a página cara.. Nen a página eu consegui abrir :( :( :(

Da um erro dizendo que : [b:d16a71e9a3]Object Not Found e ERRO 404[/b:d16a71e9a3] :( :( :(

to usando o endereço :

http://homepages.borland.com/jedi/jcl/]JCL[/url]

Mas não consegui Ter acesso a estas Units

tem uma unit chamada JclDebug que deve ser usada em conjunto com o mecanismo do JCL para captura de exceções. Nessa unit tem funções/procedures para determinar o nome do arquivo, da função/procedure, o número da linha.


:cry: :cry: :cry: :cry: :cry: Como acessar :?: :?: :?: :?:


Responder

Gostei + 0

18/03/2005

Mitsalito

MethodName(Address: Pointer): ShortString; nesta função tenho de ter o ponteiro que representa a procedure ou função

MethodAddress(const Name: ShortString): Pointer; nesta função tenho de ter o nome da procedure;
como faço pra descobrir isso sem ter de passar nada como parametro


Responder

Gostei + 0

18/03/2005

Mitsalito

CARA este JCL tem muito pouco da utilisação dele na documentação...
TJclMapLineNumberUnitEvent nada declarado na documentação dentre outros objetos que nada ha declarado


Responder

Gostei + 0

18/03/2005

Massuda

Na [ulr=http://homepages.borland.com/jedi/jcl/]JCL[/url] (Jedi Code Library), tem uma unit chamada...
:oops: Peço desculpas a todos... Não tinha visto que o link estava formatado errado.

... este JCL tem muito pouco da utilisação dele na documentação...
Esse é o problema de muita coisa open source... o código evolui mais rápido que a documentação, que fica desatualizada (mas isso acontece na maioria dos projetos né :wink: ).

Eu uso o JCL basicamente para ter um tratamento para exceções não tratadas. Acho que é mais ou menos o que você quer fazer e é, em parte, o que o [url=http://www.madshi.net/]Mad Exception[/url] faz.

Tomando por base a versão do JCL que estou usando (v.1.90), eu costumo utilizar...[list:497441a00a][*:497441a00a]AssertKindOf[*:497441a00a]TraceLoc[*:497441a00a]FileByLevel/ProcByLevel/LineByLevel[*:497441a00a]FileOfAddr/ProcOfAddr/LineOfAddr[*:497441a00a]IsDebuggerAttached[/list:u:497441a00a]Tudo isso está mais ou menos documentado ou não é difícil de entender como usar depois de fazer alguns testes com elas.

O problema maior é saber como preparar o executável para poder usar essas funções. Acho que a documentação nem fala sobre isso.

Lá vai a ´receita do bolo´:[list=1:497441a00a][*:497441a00a]Na instalação do JCL, marque a opção [b:497441a00a]IDE experts/Debug extension[/b:497441a00a] e marque a opção [b:497441a00a]Sample exception dialogs[/b:497441a00a].[*:497441a00a]De volta a IDE, abra seu projeto[*:497441a00a]Dê [b:497441a00a]File/New/Other.../Dialogs[/b:497441a00a][*:497441a00a]Dê um clique duplo no ícone do [b:497441a00a]Exception Dialog[/b:497441a00a][*:497441a00a]Salve seu projeto dando um [b:497441a00a]File/Save all[/b:497441a00a][*:497441a00a]Marque a opção [b:497441a00a]Project/Insert JCL Debug Data[/b:497441a00a][*:497441a00a]Dê um [b:497441a00a]Project/Build[/b:497441a00a] (um dialog box adicional do JCL irá aparecer se o build for bem sucedido)[/list:o:497441a00a]Se você optar por não utilizar a janela de exceção do JCL, não precisa fazer os passos 3-4-5. Entretanto, vale a pena testar pelo menos uma vez essa caixa de diálogo e dar uma olhada como o relatório de erro é criado (na função CreateReport).


[b:497441a00a]Mensagem editada![/b:497441a00a]
[quote:497441a00a=´Massuda´]
Na [ulr=http://homepages.borland.com/jedi/jcl/]JCL[/url] (Jedi Code Library), tem uma unit chamada...
:oops: Peço desculpas a todos... Não tinha visto que o link estava formatado errado.[/quote:497441a00a]
Massuda,

Link corrigido.
Sandra/moderação


Responder

Gostei + 0

18/03/2005

Massuda

Cara vou ganhar uma promoção por sua ajuda
Ei! Não cante vitória ainda, espere funcionar!

Agora... tome nota das pegadinhas:[list:c75e5b9433][*:c75e5b9433]Nunca, em hipótese alguma, compacte seu executável (em particular com o UPX). Esses compactadores de executável costumam alterar os endereços de carga dos módulos... o endereço de uma função/procedure quando o executável é gerado fica diferente do endereço quando o executável é usado, resultado: as informações que você captura na exceção estão todas erradas![*:c75e5b9433]Exceções que ocorrem muito cedo (na inicialização das units) ou muito tarde (na finalização das units) costumam não ser capturadas por qualquer mecanismo de captura de exceções que você imaginar; para evitar isso, vá no fonte do seu DPR e garanta que a unit que inicializa seu mecanismo de captura de exceções seja a primeita unit da lista (difícil de fazer, especialmente se você usa a unit ShareMem)[/list:u:c75e5b9433]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar