Главная страница
    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.008 c
8-1123097311
Кот
2005-08-03 23:28
2006.01.08
Проблемы с загрузкой jpg в Image.


2-1135033586
ZeeM
2005-12-20 02:06
2006.01.08
Функции пребразования StrToFloat, StrToInt и др.


3-1131972061
solenko
2005-11-14 15:41
2006.01.08
Выполнение хранимой процедуры по имени


2-1135158971
Dmitrij_K
2005-12-21 12:56
2006.01.08
MS Word


14-1134635324
SPeller
2005-12-15 11:28
2006.01.08
А в чём смысл?





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