Announcement

Collapse
No announcement yet.

Exception und Fehlerlokalisierung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Exception und Fehlerlokalisierung

    Kann man nach einer Exception automatisch ermitteln,
    welche Prozedur und Programmzeile die Exception ausgelöst hat?

    (Ich meine natürlich, wenn das Programm schon beim Kunden läuft.)

    Habt Ihr besondere Strategien zur Fehlerlokalisierung entwickelt?

    Ich bin für jeden Tip dankbar!

    Stephan

  • #2
    Bei meinen Anwendungen gehe ich normalerweise wie folgt vor:

    pre
    unit ABC;

    ...
    ...
    ...

    procedure TForm1.XYZ;
    begin
    ...
    ...
    ...
    try
    ...
    ...
    try
    ...
    ...
    except
    on E: Exception do
    raise ETbVerwError.CreateFmt(
    '%s%s%s',
    [E.Message, #10 + #13,
    'Modul: ABC.pas; procedure TForm1.XYZ; Pos 2']);
    end
    end;
    \pre

    In besonders kritischen Fällen speichere ich mir diese Texte mit Datum und Uhrzeit in einer separaten Datei, welche z. B. max. 100 Meldungen im FIFO-Ring Prinzip speichert

    Comment


    • #3
      Bei meinen Anwendungen gehe ich normalerweise wie folgt vor:

      <pre>
      unit ABC;

      ...
      ...
      ...

      procedure TForm1.XYZ;
      begin
      ...
      ...
      ...
      try
      ...
      ...
      try
      ...
      ...
      except
      on E: Exception do
      raise ETbVerwError.CreateFmt(
      '%s%s%s',
      [E.Message, #10 + #13,
      'Modul: ABC.pas; procedure TForm1.XYZ; Pos 2']);
      end
      end;
      <\pre>

      In besonders kritischen Fällen speichere ich mir diese Texte mit Datum und Uhrzeit in einer separaten Datei, welche z. B. max. 100 Meldungen im FIFO-Ring Prinzip speichert

      Comment


      • #4
        bei meinen Anwendungen gehe ich normalerweise so vor, daß ich versuche möglichst weitgehend alle kritischen Codestellen mittels eines try/except Schutzblockes zu schützen. Mit der Fehlermeldung gebe ich dann den Entstehungsort mit aus. Das sieht dann im Quellcode folgendermaßen aus:

        <pre>
        procedure TForm1.XYZ;
        begin
        try
        ...
        ...
        except
        on E: Exception do
        raise ETbVerwError.CreateFmt('%s%s%s', [E.Message, #13+#10, 'Unit ABC.pas; procedure TForm1.XYZ; Pos. 10']);
        end
        end;
        \pr

        Comment

        Working...
        X