Форум: "Основная";
Текущий архив: 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.47 MB
Время: 0.007 c