Mamy funkcję która podmienia Message w Exception i zwraca go (bez raise)

 function MesException(E : Exception) : Exception; 

oraz globlany handler

procedure HdeTDebuger.HdeGlobException(Sender: TObject; E : Exception); 

no to jazda

...
  except
    on E:Exception do
    begin
      E := MesException(E);
      {$IFDEF DEBUG}
      WriteLn(E.Message); // tutaj jeszcze Message nie jest null
      {$ENDIF}
      raise E; -- tutal wpada w HdeGlobException
    end;
  end;

Niestety po wejściu w HdeGlobException E.Message = nil.
Dlaczegóż tak się dzieje ? Coś robię źle ?