AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Exception-Handling: verursachende Function/Procedufe finden?
Thema durchsuchen
Ansicht
Themen-Optionen

Exception-Handling: verursachende Function/Procedufe finden?

Ein Thema von HeikoAdams · begonnen am 1. Dez 2005 · letzter Beitrag vom 1. Dez 2005
Antwort Antwort
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#1

Re: Exception-Handling: verursachende Function/Procedufe fin

  Alt 1. Dez 2005, 09:29
Zitat von HeikoAdams:
Hallo,
das Grundgerüst steht schon lange
Dein Lösungsvorschlag mit der globalen Variable ist bei einer bestehenden Anwedung mit ca 730.000 Zeilen Code wenig praktikabel.

Gruß
Du kannst natürlich über den Sender der Exception die "auslösende" Komponente inkl. Name etc. auslesen und mit ausgeben, aber das ist sehhhr ungenau. Wenn Du auch nur eine ungefähre Vorstellung hast, woher der Fehler kommen könnte, dann sind mit Sicherheit nur wenige hundert Zeilen betroffen

Ich mach das in einem Programm so:
Delphi-Quellcode:
procedure TMyProg.AppException(Sender: TObject; E: Exception);
var
  MyError: TStringList;
  Comp, Tmp1, Tmp2: string;
begin
  MyError := nil;
  try
    MyError := TStringlist.Create;
    if FileExists(ChangeFileExt(ParamStr(0), '.err')) = True then
    begin
      MyError.LoadFromFile(ChangeFileExt(ParamStr(0), '.err'));
      MyError.Add('');
      MyError.Add('');
    end;
    Tmp2 := 'Exception from ';
    Tmp1 := '';
    while Length(Tmp1) < Length(Tmp2) do
      Tmp1 := Tmp1 + '-';
    Tmp1 := Tmp1 + '-------------------';
    MyError.Add(Tmp1);
    MyError.Add(Tmp2 + FormatDateTime('mm"/"dd"/"yyyy hh":"nn":"ss', Now));
    MyError.Add(Tmp1);
    MyError.Add('');

    //Meldung formatieren...
    Comp := Trim(Sender.ClassName);
    if Comp = 'then
      Comp := 'Application';
    try
      Comp := Comp + '[' + TControl(Sender).Name + ']';
    except
      try
        Comp := Comp + '[!!! ' + E.Message + ']';
      except
      end;
    end;
    Comp := Comp + ': "' + E.Message;
    while pos(#13, Comp) > 0 do
      Comp := copy(Comp, 1, pos(#13, Comp) - 1) + ' ' + Copy(Comp, pos(#13,
        Comp) + 1, Length(Comp));
    Comp := Trim(Comp) + '"';
    if IsEncStarting = True then
    begin
      Comp := Comp + #13#13 + GetResTxt(LangDll, 83);
    end;
    MyError.Add(Comp);

    //Begrenzung
    while MyError.Count > 2000 do
      MyError.Delete(0);
    while (MyError.Count > 0) and (copy(MyError[0], 1, 1) <> '-') do
      MyError.Delete(0);

    MyError.SaveToFile(ChangeFileExt(ParamStr(0), '.err'));

  finally
    MyError.Free;
  end;
  if (pos('closed gracefully', LowerCase(E.Message)) = 0) and (pos('read time',
    LowerCase(E.Message)) = 0) and (IsClosing = False) and (IsEP = False) then
    MessageDlg(E.Message, mtError, [mbOK], 0);
  EncError := True;
  IsEP := False;
end;
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz