Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
2-1135157933
Новенькая
2005-12-21 12:38
2006.01.08
опять treeview


14-1133772225
Slider007
2005-12-05 11:43
2006.01.08
Задачка. Сижу парю мозги.


1-1133492829
Петр
2005-12-02 06:07
2006.01.08
Как подгрузить dll, написанную в Delphi в проект CBuilder?


2-1134849844
malenkii_myk
2005-12-17 23:04
2006.01.08
Данные из TFileStream в TString, как реализовать ?


2-1134833592
dude
2005-12-17 18:33
2006.01.08
что в Delphi называется словом ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский