Comment dois-je re-raise un Delphi exception après l'enregistrement?

Connaissez-vous un moyen de piéger, de journal, et re-raise exception dans le code Delphi?
Un exemple simple:

procedure TForm3.Button1Click(Sender: TObject);
begin
  try
    raise Exception.Create('Bum');
  except
    on E: Exception do
    begin
      MyHandleException(E);
    end;
  end;
end;

procedure TForm3.MyHandleException(AException: Exception);
begin
  ShowMessage(AException.Message);
  LogThis(AException.Message);  
  // raise AException; - this will access violate
end;

J'ai donc besoin de la relancer dans le bloc except mais je me demandais si il ya une meilleure façon d'écrire ma propre méthode pour gérer et (dans certaines conditions) à re-lever des exceptions.

  • Viens de re-lever de la manière habituelle. Il maintient votre code d'auto-documentation et de ne pas gâcher la trace de la pile.
  • yep j'ai vraiment envie de préserver la pile!
  • Si c'est la journalisation des exceptions que vous êtes après, vous devriez jeter un oeil à madExcept, EurekaLog et/ou Jedi. Ont chacun une meilleure gestion de l'enregistrement d'exception que vous pourriez jamais rêver de faire vous-même.
  • Oui je sais les outils, je préfère EurekaLog, mais il n'est pas à moi de les utiliser et comment les utiliser ceux de l'outil avec les clients .. donc je fais ce que je peux 🙂
  • Les Exceptions sont un décompte de références. Le déclenchement de l'exception est décrémenté lorsque l'EXCEPTION de bloquer les sorties. ÉLEVER par lui-même w/o une instance exception incrémente le compteur de référence. SOULEVER suivie par une instance exception (par exemple, pour relever E; ) ne sera pas, d'où l'AV noté. Exception à la règle.Créer (), une exception avec les ref compter du 1er et, si cela est fait dans un bloc d'exception, n'est pas soumis à l'arbitre de compter décrémenter lorsque l'EXCEPTION de bloquer les sorties. Écrire du code où élever seul peut être appelé, de créer une nouvelle exception, ou utiliser le AcquireExceptionObject() pour incrémenter la ref nombre, comme par le ci-dessous des solutions.
InformationsquelleAutor Nik Todorov | 2010-05-27