Внешний вид сайта:

Добавляем автоматическую обработку ошибок

Рано или поздно после написания программы и выброса ее в свет возникает необходимость исправлять ранее не найденные ошибки в программе и добавлять в нее новые :-). Лучше использовать функцию автоматической обработки ошибок, чтобы при возникновении ошибки у пользователя все ошибки складывались в специальный log-файл, который бы высылался автоматически (или вручную) Вам для ведения базы ошибок, которые нужно исправить. Для этого предлагаю свой код…

На форме располагаем стандартный компонент ApplicationEvents и в обработке события OnException компонента пишем строки: (многоточие - пишите Ваш код, вся суть в другой части кода)

uses
	...SyncObjs...
	
  Public
    CheckEvent: TEvent;
	ClassRef: TClass;
...

procedure TForm1.ApplicationEvents2Exception(Sender: TObject;
  E: Exception);
var LogFile: TextFile;
    ClassTree: String;
begin                                        // обработка исключений в программе
  AssignFile(LogFile,ExtractFilePath(paramstr(0))+'errors.log');
  if FileExists(ExtractFilePath(paramstr(0))+'errors.log')
      then
        begin
          Append(LogFile);
          WriteLn(LogFile);
        end
      else
        begin
          ReWrite(LogFile);
          WriteLn(LogFile,'ФИО пользователя: '+...);
          WriteLn(LogFile,'Эл. адрес: '+...);
          WriteLn(LogFile,'Серийный номер: '+...);
          WriteLn(LogFile,'-------------------------------------------------------------');
          WriteLn(LogFile,'Платформа: '+...+' (ver. '+...+' build '+...+')');
          WriteLn(LogFile,'Тип процессора: '+...);
          WriteLn(LogFile,'Память: '+...+' кб');
          WriteLn(LogFile,'Сист. пользователь: '+...);
          WriteLn(LogFile,'=============================================================');
          WriteLn(LogFile);
        end;
  WriteLn(LogFile);
  WriteLn(LogFile,DateToStr(Date)+' '+TimeToStr(Time));
  WriteLn(LogFile,'-------------------------------------------------------------');

  ClassTree:=E.ClassName;
  ClassRef:=E.ClassType;
  while ClassRef.ClassParent<>nil do
  begin 
    ClassRef:=ClassRef.ClassParent;
    ClassTree:=ClassRef.ClassName+' => '+ClassTree;
  end;

  WriteLn(LogFile,ClassTree+':');
  WriteLn(LogFile,E.Message);
  WriteLn(LogFile,'-------------------------------------------------------------');
  Flush(LogFile);
  CloseFile(LogFile);

Application.MessageBox('Во время работы программы возникла ошибка. 
		Данные об ошибке сохранены в файл errors.txt. 
		По возможности передайте файл разработчикам.',
		'Ошибка в программе',mb_ok+mb_IconError); end; 

В общем, в результате добавления следующего кода в Вашу программу, собирание ошибок программы представляет собой более приятный процесс…

Автор статьи - Калашников [Silent] Игорь

Комментарии

Нет комментариев. Ваш будет первым!