Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.08;
Скачать: CL | DM;

Вниз

Application.OnException   Найти похожие ветки 

 
NiGGa ©   (2005-12-08 16:37) [0]

Здраствуйте.
Собственно решил написать не кий обработчик и повесить его на сабж. Сгенерил АВ, и в результате вместо ожидаемой обработки получмл крайне странные результаты. Тогда я заккоментировал весь код обработки исключения, и вот что меня удивило: что после генерации АВ начинается отработка кода обработчика(который пустой), и как только она заканчивается, снова! начинается отработка кода обработчика. очевидно оно так может до бесконечности.
Мне нужно собственно объяснение этого феномена, ведь так быть не должно.


 
Digitman ©   (2005-12-08 16:45) [1]


> Сгенерил АВ


показыва в коде, где и как ..

показывай так же потенциально фигурирующие в том месте try..except-блоки и их тела ..


> решил написать не кий обработчик и повесить его на сабж


показывай его тело ..


 
NiGGA ©   (2005-12-08 17:29) [2]

ОК.

генерю сам ексепшн:
procedure TForm1.Button1Click(Sender: TObject);
var
 p: ^integer;
begin
 p^ := 100;
end;


Обработчик
procedure TExceptionHandler.ExceptionHandler(Sender: TObject; E: Exception);
var
 Msg: string;
 jpgAFFile, jpgDFile: string;
 eInformation: TStringList;
begin
 if FShowException then Application.ShowException(E);

 FFileName := ExtractFileName(Application.ExeName) + "_" +
              FormatDateTime("yymmdd_hhnnss", Now);

 //jpgAFFile := ApplicationScreenshot;
 //jpgDFile := DesktopScreenshot;

 eInformation := GenerateExeptionInformation(E);

 if FShowErrorMessage then begin
   Msg := E.Message;

   if MessageBox(Application.Handle,
                 PChar(Msg + #13#13+
                 "Íåâîçìîæíî êîððåêòíî îáðàáîòàòü îøèáêó." + #13 +
                 "Ýòî ìîæåò ïðèâåñòè ê íåïðàâèëüíîé ðàáîòå ñèñòåìû è âîçìîæíî ïîòåðå äàííûõ.      " + #13#13 +
                 "Ñãåíåðèðîâàòü ïèñüìî ñ îïèñàíèåì îøèáêè â ñëóæáó ïîääåðæêè?"  + #0),
                 PChar(Application.Title + ". Íåîáðàáîòàííàÿ îøèáêà." + #0),
                 MB_YESNO + MB_ICONERROR) = IDYES
   then SendEmail(SupportMail, SupportMail, "Î÷åò îá îøèáêå. Ïðîãðàììà [" + Application.Title + "]", jpgAFFile + ";" + jpgDFile, eInformation);
 end;

 eInformation.Clear;
 eInformation.Free;

 E := EAbort.Create("gi");
 
 if FTerminateOnException then Application.Terminate;        
end;


ApplicationScreenshot, DesktopScreenshot - скриншоты активного окна и десктопа

GenerateExeptionInformation(E) - генерит TStrings с содержанием Е.Message и GetFileVersionInfo.

SendEmail - шлет мыло посредством MAPI.

Но сама соль в том, что когда закомментировал все строки, оставив только begin end; получил при первом же нажатии на кнопку, по кругу выполняющийся код(путой) обработчика.


 
NiGGa ©   (2005-12-08 17:32) [3]

Прошу прощения, немного соврал. По сути это не важно но все же.

function TExceptionHandler.GenerateExeptionInformation(const E: Exception): TStringList;
var
 eInformation: TStringList;
 fileName: string;
begin
 eInformation := TStringList.Create;
 eInformation.Add("Èìÿ êîìïüþòåðà: [" + ComputerName + "]");
 eInformation.Add("Èìÿ ïîëüçîâàòåëÿ: [" + UserName + "]");
 eInformation.Add("Îøèáêà: [" + E.Message + "]");
 eInformation.Add("Àêòèâíàÿ ôîðìà: [" + Screen.ActiveForm.Name + "]");
 if FFileVersionInfo.InformationExist then begin
   eInformation.Add("");
   eInformation.Add("Èíôîðìàöèÿ î ïðîãðàììå:");
   eInformation.Add("  Èìÿ êîìïàíèè: " + FFileVersionInfo.CompanyName);
   eInformation.Add("  Íàçâàíèå ïðîäóêòà: " + FFileVersionInfo.ProductName);
   eInformation.Add("  Âåðñèÿ ïðîäóêòà: " + FFileVersionInfo.ProductVersion);
   eInformation.Add("  Âåðñèÿ ôàéëà: " + FFileVersionInfo.FileVersion);
   eInformation.Add("  Îïèñàíèå ôàéëà: " + FFileVersionInfo.FileDescription);
   eInformation.Add("  Àâòîðñêîå ïðàâî: " + FFileVersionInfo.LegalCopyright);
   eInformation.Add("  Âíóòðåííåå èìÿ: " + FFileVersionInfo.InternalName);
   eInformation.Add("  Èìÿ ôàéëà: " + FFileVersionInfo.OriginalFilename);
   eInformation.Add("  Êîììåíòàðèè: " + FFileVersionInfo.Comments);
   eInformation.Add("  ßçûê: " + FFileVersionInfo.LanguageInfo);
 end; {if}

 Result := eInformation;

 fileName := ExtractFilePath(Application.ExeName) + CErrorFolder + "\" + FFileName + ".rpt";
 CheckErrorFolderExistence;
 eInformation.SaveToFile(fileName);
end; {GenerateExeptionInformation}


FFileVersionInfo - тут и берется GetFileVersionInfo.



Страницы: 1 вся ветка

Текущий архив: 2006.01.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
2-1135039470
Neirooman
2005-12-20 03:44
2006.01.08
Курсор из файла


3-1131906942
Layner
2005-11-13 21:35
2006.01.08
Помогите узнать в ADOQuery - Mode (состояние)


2-1134908751
newhite
2005-12-18 15:25
2006.01.08
MainMenu


2-1134853068
Scripl
2005-12-17 23:57
2006.01.08
Ссылка


4-1130664226
злобная танька
2005-10-30 12:23
2006.01.08
Открыть с помощью...