Exception Tratamento de Erros
: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.
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
Curtidas 0
Melhor post
Mitsalito
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
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
GOSTEI 1
Mais Respostas
Gandalf.nho
18/03/2005
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]
GOSTEI 0
Marco Salles
18/03/2005
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 :?: :?: :?:
Isto serve para voce :?: :?: :?:
GOSTEI 0
Mitsalito
18/03/2005
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.
O Delphi tem alguma função que retorne o numero da linha? por exemplo.
GOSTEI 0
Massuda
18/03/2005
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.
GOSTEI 0
Mitsalito
18/03/2005
esta unit está no delphi?
GOSTEI 0
Gandalf.nho
18/03/2005
esta unit está no delphi?
Tem que ser baixada do link que o Massuda forneceu.
GOSTEI 0
Mitsalito
18/03/2005
Cara vc num teria o nome das procedures que fazem isso para facilitar pro meu lado não?
GOSTEI 0
Mitsalito
18/03/2005
Ou algum exemplo pois a biblioteca tem objeto pra caramba
GOSTEI 0
Gandalf.nho
18/03/2005
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
GOSTEI 0
Rômulo Barros
18/03/2005
[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]
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]
GOSTEI 0
Marco Salles
18/03/2005
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
:cry: :cry: :cry: :cry: :cry: Como acessar :?: :?: :?: :?:
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 :?: :?: :?: :?:
GOSTEI 0
Mitsalito
18/03/2005
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
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
GOSTEI 0
Mitsalito
18/03/2005
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
TJclMapLineNumberUnitEvent nada declarado na documentação dentre outros objetos que nada ha declarado
GOSTEI 0
Massuda
18/03/2005
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
GOSTEI 0
Massuda
18/03/2005
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]
GOSTEI 0
Massuda
18/03/2005
Esqueci o mais importante...
Cara vou ganhar uma promoção por sua ajuda
:lol: Aguardo uma contribuição significativa sua no meu banco de horas :lol: Segue dados para depósito via MP :lol:GOSTEI 0
Mitsalito
18/03/2005
Cara valeu mesmo.
O incrivel é que na tela ele traz tudo nos detalhes o unico trabalho que vou ter é de salvar para log e programar o botão para enviar por email os dados colhidos pelo debug.
Quanto a compactar executaveis ... eu particularmente não sou a favor disso.
Já sobre a inicialisação não entendi muito bem, não encontrei este ShareMem somente estou usando o ExceptionDialog, no mais o que farei é implementar o codigo que nele está para traduzir as mensagens e salvar automáticamente o log para se ter um historico dos erros ocorridos.
Mais uma pergunta ... tem alguma coisa a mais que terei de ter para instalar o meu software por conta desta biblioteca?
O incrivel é que na tela ele traz tudo nos detalhes o unico trabalho que vou ter é de salvar para log e programar o botão para enviar por email os dados colhidos pelo debug.
Quanto a compactar executaveis ... eu particularmente não sou a favor disso.
Já sobre a inicialisação não entendi muito bem, não encontrei este ShareMem somente estou usando o ExceptionDialog, no mais o que farei é implementar o codigo que nele está para traduzir as mensagens e salvar automáticamente o log para se ter um historico dos erros ocorridos.
Mais uma pergunta ... tem alguma coisa a mais que terei de ter para instalar o meu software por conta desta biblioteca?
GOSTEI 0
Massuda
18/03/2005
... tem alguma coisa a mais que terei de ter para instalar o meu software por conta desta biblioteca?
Que eu me lembre... não.Agora, se você desabilitar a opção [b:e4bb666002]Project/Insert JCL Debug Data[/b:e4bb666002], terá de gerar um mapa completo de linkagem do programa e distribuir esse arquivo (.MAP) junto com seu programa. Mas é muito mais cômodo deixar a opção habilitada.
GOSTEI 0
Christian_adriano
18/03/2005
Olá colega Massuda,
como o nosso colega ´Mitsalito´ já tinha falando antes, como eu pego o nome do método pra passar como paramento para ´MethodAddress´ ?
O que estou tentando fazer é o seguinte, quero q quando ocorra uma exceção na aplicação, apareça também o nome do Método na msg de erro.
Tem alguma ideia de como fazer isso ?
Desde já agradeço pela atenção.
[]´s.
como o nosso colega ´Mitsalito´ já tinha falando antes, como eu pego o nome do método pra passar como paramento para ´MethodAddress´ ?
O que estou tentando fazer é o seguinte, quero q quando ocorra uma exceção na aplicação, apareça também o nome do Método na msg de erro.
Tem alguma ideia de como fazer isso ?
Desde já agradeço pela atenção.
[]´s.
GOSTEI 0
Massuda
18/03/2005
...quero q quando ocorra uma exceção na aplicação, apareça também o nome do Método na msg de erro.
MethodName/MethodAddress não serve para isso que você pretende fazer.O uso normal dessas procedures é no mecanismo de gravar ler dados de objetos do DFM.
Essas procedures só funcionam com coisas que são classes, não funcionam com functions/procedures que não são parte de uma classe.
GOSTEI 0
Christian_adriano
18/03/2005
Olá Massuda,
muito obrigado por responder... então tem uma outra forma de se fazer o que eu quero ?
Obrigado.
[]´s.
muito obrigado por responder... então tem uma outra forma de se fazer o que eu quero ?
Obrigado.
[]´s.
GOSTEI 0
Massuda
18/03/2005
Leia atentamente este tópico... aqui está explicado como fazer isso usando o JCL. Você pode pesquisar o fórum por MadExcept para ver uma implementação alternativa.
GOSTEI 0
Erisvaldo Silva
18/03/2005
Alguém com a mesma situação em 2018?
GOSTEI 0