Fórum Alguem sabe como pegar a linha do ero #285659
21/06/2005
0
Leonardobhbr
Curtir tópico
+ 0Posts
04/05/2007
Nigro
Gostei + 0
04/05/2007
Massuda
Gostei + 0
04/05/2007
Adriano Santos
procedure TDcCaptureErro.Execute(Sender: TObject; E: Exception); var Arquivo: TextFile; NomeAlias: TStringList; NomeBDECFG: TRegistry; fFor: Integer; fTpObjeto: string; function ReplaceStr(Caracter: string; Quantidade: Integer): string; var I: Integer; begin Result := ´´; for I := 0 to Quantidade - 1 do Result := Result + Caracter; end; begin if (FAtivo) and not (csDesigning in ComponentState) then begin if (Sender.ClassName <> TForm.ClassName) then fTpObjeto := Sender.ClassName else fTpObjeto := TForm(Sender).Parent.Name; if not DirectoryExists(FDiretorioErro) then ForceDirectories(FDiretorioErro); AssignFile(Arquivo, FDiretorioErro + FNomeArqErro); ReWrite(Arquivo); Append(Arquivo); try FErro := E.Message; WriteLn(Arquivo, ´Relatório de erros gerado pelo Sistema.´); WriteLn(Arquivo, ReplaceStr(´-´, 50)); WriteLn(Arquivo, ´Descrição do erro..: ´ + E.Message); WriteLn(Arquivo, ´Código erro Windows: ´ + IntToStr(IOResult)); WriteLn(Arquivo, ´Sistema............: ´ + TApplication(Sender).ExeName); WriteLn(Arquivo, ´Empresa............: ´ + FCliente); WriteLn(Arquivo, ´Usuário ativo......: ´ + FUsuario); WriteLn(Arquivo, ´DATA/HORA: ´ + DateToStr(Date) + ´ - ´ + TimeToStr(Time)); WriteLn(Arquivo, ReplaceStr(´-´, 50)); WriteLn(Arquivo, ´Informações sobre banco de dados´); WriteLn(Arquivo, ´ALIASES ATIVOS´); NomeAlias := TStringList.Create; Session.GetAliasNames(NomeAlias); for fFor := 0 to NomeAlias.Count - 1 do begin WriteLn(Arquivo, ReplaceStr(´ ´, 20) + ´> ´ + NomeAlias[fFor]); end; NomeAlias.Free; NomeBDECFG := TRegistry.Create; NomeBDECFG.RootKey := HKEY_LOCAL_MACHINE; if NomeBDECFG.RegistryConnect(´´) then begin if NomeBDECFG.OpenKey(´SOFTWARE\BORLAND\DATABASE ENGINE´, False) then begin WriteLn(Arquivo, ´CFG ativo : ´ + NomeBDECFG.ReadString(´CONFIGFILE01´)); end; end; NomeBDECFG.CloseKey; NomeBDECFG.Free; WriteLn(Arquivo, ´Erro chamado pelo objeto : ´ + TComponent(Sender).Name); WriteLn(Arquivo, ´Erro gerado pelo form : ´ + TComponent(Sender).Owner.Name); WriteLn(Arquivo, ´Caption do Form: ´ + TForm(TComponent(Sender).Owner).Caption); FEmpresa.FConexao.FAnexo := FDiretorioErro + FNomeArqErro; finally CloseFile(Arquivo); end; ChamaForm(Sender); end; end;
O componente não está finalizado, mas dá pra tirar algum proveito.
As linhas que capturam algumas informações interessantes estão no final:
WriteLn(Arquivo, ´Erro chamado pelo objeto : ´ + TComponent(Sender).Name); WriteLn(Arquivo, ´Erro gerado pelo form : ´ + TComponent(Sender).Owner.Name); WriteLn(Arquivo, ´Caption do Form: ´ + TForm(TComponent(Sender).Owner).Caption); FEmpresa.FConexao.FAnexo := FDiretorioErro + FNomeArqErro;
Aqui eu capturo o objeto que causou a exceção assim como o form que ele está alocado. Eu gravo isso em um arquivo no diretório da aplicação que posteriormente pode ser enviado para o ´suporte´ técnico. É bem interessante. Eu parei o desenvolvimento na detecção de internet, ou seja, se o componente perceber que tem internet habilitado ele aciona um botão de envio que pode ser usado pra enviar o arquivo direto pra algum e-mail.
O texto gerado é mais ou menos como este:
Relatório de erros gerado pelo Sistema. -------------------------------------------------- Descrição do erro..: Access violation at address 00000000. Read of address 00000000 Código erro Windows: 0 Sistema............: D:\Delphi Developer\Components\Common\D7-2006-2007\DcLibrary\DcCaptureErro\Demo\Project1.exe Empresa............: Reality Construtora Usuário ativo......: Anônimo DATA/HORA: 4/5/2007 - 22:19:00 -------------------------------------------------- Informações sobre banco de dados ALIASES ATIVOS > DBDEMOS > DefaultDD > IBLocal > Banco de dados do MS Access > Arquivos do Excel > Arquivos do dBASE CFG ativo : C:\Arquivos de programas\Arquivos comuns\Borland Shared07\BDE\IDAPI32.CFG Erro chamado pelo objeto : Button1 Erro gerado pelo form : frmClientes Caption do Form: Este é o caption do form
Se quiser pegar pra estudar ou até ajudar a terminá-lo o link pro arquivo está disponível no meu blog:
http://www.delphitodelphi.blogspot.com (DcCaptureErro)
Abs
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)