05. marts 2010 - 07:43
Der er
6 kommentarer og
1 løsning
Andre oplysninger end E.Message
Min fejlhåndtering inkluderer nedenstående som skriver meddelelsen i min logfil. Men jeg ville egentlig også gerne vide hvor fejlen er opstået - altså f.eks. navnet på den procedure eller funktion der har genereret meddelelsen.
Kan det kringles?
on E: exception do
begin
Logfile.Error(E.Message);
end
05. marts 2010 - 19:59
#3
Du kunne starte hver procedure/function med at opdatere en global variabel med procedurens/functionens navn, og så sende den med efter e.message..
05. marts 2010 - 20:20
#4
Et grundliggende problem er at en EXE oversat med optimize uden debug ikke har hverken navne eller linie numre d.v.s. at de kan ikke puttes ind automatisk.
Du bliver formentligt nød til at bide i det sure æble og manuelt skrive den information som skal i log filen for at identificere hvor det sker.
Enesten anden ide jeg kan komme på er en præprocessor som erstatte __FILE__, __LINE__, __PROC__ etc. med den rigtige tekst.
11. marts 2010 - 03:28
#6
C:\>type prep.pas
program prep;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
f1, f2 : text;
line : string;
n : integer;
begin
assign(f1, ParamStr(1));
assign(f2, ParamStr(2));
reset(f1);
rewrite(f2);
n := 0;
while not eof(f1) do begin
inc(n);
readln(f1, line);
line := StringReplace(line, '__FILE__', '''' + ParamStr(1) + '''', [rfReplaceAll]);
line := StringReplace(line, '__LINE__', '''' + IntToStr(n) + '''', [rfReplaceAll]);
writeln(f2, line);
end;
close(f2);
close(f1);
end.
C:\>type dump.pps
program dump;
{$APPTYPE CONSOLE}
procedure sub2;
begin
writeln('File: ',__FILE__,' Line: ',__LINE__);
end;
procedure sub1;
begin
writeln('File: ',__FILE__,' Line: ',__LINE__);
sub2;
end;
begin
sub1;
end.
C:\>dcc32 prep.pas
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
prep.pas(28)
29 lines, 0.03 seconds, 31216 bytes code, 3893 bytes data.
C:\>prep dump.pps dump.pas
C:\>dcc32 dump.pas
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
dump.pas(21)
22 lines, 0.03 seconds, 10700 bytes code, 1801 bytes data.
C:\>dump
File: dump.pps Line: 14
File: dump.pps Line: 8