Главная страница
    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.47 MB
Время: 0.008 c
2-1135089991
Asail
2005-12-20 17:46
2006.01.08
Проблемма с IIS и ISAPI dll...


2-1134853618
Scripl
2005-12-18 00:06
2006.01.08
Caption


4-1130909108
Muchacho
2005-11-02 08:25
2006.01.08
взять текст из чужого ListBox-a


2-1135187302
nirvana
2005-12-21 20:48
2006.01.08
КАк сделать ЛОГ??????????


4-1130786960
NKVDwnik
2005-10-31 22:29
2006.01.08
ShellNotifyIcon





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский