AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wann werden Exception-Objekte freigegeben?
Thema durchsuchen
Ansicht
Themen-Optionen

Wann werden Exception-Objekte freigegeben?

Ein Thema von himitsu · begonnen am 8. Sep 2009 · letzter Beitrag vom 9. Sep 2009
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.568 Beiträge
 
Delphi 12 Athens
 
#3

Re: Wann werden Exception-Objekte freigegeben?

  Alt 8. Sep 2009, 21:44
Auf die Idee, es so leicht zu prüfen war ich jetzt garnicht gekommen

Hatte nur keine große Lust es zu debuggen und hatte die Hoffnung es weiß schon einer

Hab es gleich nochmal rekursiv probiert.
Delphi-Quellcode:
destructor EMyException.Destroy;
begin
  ShowMessage('Destroy: ' + Message);
  inherited;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    try
      raise EMyException.Create('Test 1');
    except
      on E: Exception do begin
        ShowMessage('OnExcept: ' + E.Message);
        raise EMyException.Create('Test 2');
      end;
    end;
  except
    on E: Exception do
      ShowMessage('OnExcept: ' + E.Message); {X}
  end;
  ShowMessage('End');
end;
Es wird also immer gleich nach seiner letzen Verwendung freigegeben.

Und hier demnach erst nach dem 2. Try-Except-Block.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    try
      raise EMyException.Create('Test 1');
    except
      on E: Exception do begin
        ShowMessage('OnExcept: ' + E.Message);
        raise;
      end;
    end;
  except
    on E: Exception do
      ShowMessage('OnExcept: ' + E.Message);
  end;
  ShowMessage('End');
end;

Nja, es hätte ja sein können, daß bis alle Objekte mindestens bis zur letzen Except-Ebene aufgehoben werden
und man somit eine Art Backtacking hätte durchführen können, um so alle nachfolgenden(vorhergehenden) Exception rauszubekommen.


Also daß man z.B. an Punkt {X} auch noch von der Exception 'Test 1' hätte etwas erfahren können.

Jedenfalls hätte ich hier durch das RaiseListPtr soetwas vermutet.
Delphi-Quellcode:
{Unit System}
function ExceptObject: TObject;
begin
  if RaiseListPtr <> nil then
    Result := PRaiseFrame(RaiseListPtr)^.ExceptObject
  else
    Result := nil;
end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
 


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 21:00 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