Ĺadny brzuch
Utworzyłem sobie w programie moduł do raportowania błędów.
Procedura jest podpięta do
Application.onException
Jego kod wygląda tak:
procedure Terr.Blad(Sender: TObject; E: Exception); begin {...} prg.Lines.Add('##ERRSTART#'); prg.Lines.Add('##'+E.Message); prg.Lines.Add('##'+E.ClassName); prg.Lines.Add('##'+IntToStr(E.InstanceSize)); prg.Lines.Add('##'+(Sender as TComponent).Name); prg.Lines.Add('##ERREND#'); err.ShowModal; end; end;
Czy jest możliwość pobrania w jakim komponencie wystąpił błąd?
Jeżeli wystąpi błąd w kliknięciu na przycisk na Form1, to otrzymam raport, że coś tam się zepsuło na Form1, ale nic nie jest wspomniane o przycisku. (Sender as TComponent).Name); zwraca nazwę formy.
Sprawdzę potem (tutaj nie mam delphi) jak odczytać dokładniejsze źródło błędu, ale generalnie w aplikacjach nie stosuje się mechanizmów bsługi błędu jaki tutaj przedstawiłeś, chociażby z takiego powodu że w takim przypadku nie jesteś w stanie zapobiec wyciekom pamięci, oraz zapobiec efektom ubocznym zaistniałego błędu.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Procedura jest podpięta do
Application.onException
Jego kod wygląda tak:
procedure Terr.Blad(Sender: TObject; E: Exception); begin {...} prg.Lines.Add('##ERRSTART#'); prg.Lines.Add('##'+E.Message); prg.Lines.Add('##'+E.ClassName); prg.Lines.Add('##'+IntToStr(E.InstanceSize)); prg.Lines.Add('##'+(Sender as TComponent).Name); prg.Lines.Add('##ERREND#'); err.ShowModal; end; end;
Czy jest możliwość pobrania w jakim komponencie wystąpił błąd?
Jeżeli wystąpi błąd w kliknięciu na przycisk na Form1, to otrzymam raport, że coś tam się zepsuło na Form1, ale nic nie jest wspomniane o przycisku. (Sender as TComponent).Name); zwraca nazwę formy.
Sprawdzę potem (tutaj nie mam delphi) jak odczytać dokładniejsze źródło błędu, ale generalnie w aplikacjach nie stosuje się mechanizmów bsługi błędu jaki tutaj przedstawiłeś, chociażby z takiego powodu że w takim przypadku nie jesteś w stanie zapobiec wyciekom pamięci, oraz zapobiec efektom ubocznym zaistniałego błędu.