Ich versuche, ein Protokollsystem auf meinem Programm zu erstellen, das Debugging-Nachrichten auf Textdateien protokolliert, und ich möchte den genauen Ort in dem Code speichern, wo die Protokollnachricht aufgerufen, aber ich möchte Assert Funktion nicht verwenden, weil es erzeugt Ausnahmen und dieses System ist nicht nur für die Protokollierung von Ausnahmen, ich muss auch einige Debugging-Informationen schreiben.Delphi: Wie bekomme ich (aktuelle Codezeile, aktuelle Einheit, aktuelle Funktion) ohne Assertion zu verwenden?
Beispiel usning assert:
procedure AnyProcedure();
begin
try
Assert(1=0);
except
on E: Exception do
Log.AddLine('Log occurred is '+E.Message+' : Start');//Log occurred is "c:\progr~..jkdj.pas" at line [29]
end;
//....some code
try
Assert(1=0);
except
on E: Exception do
Log.AddLine('Log occurred is '+E.Message+' : Step1 done');//Log occurred is "c:\progr~..jkdj.pas" at line [37]
end;
//....some code
try
Assert(1=0);
except
on E: Exception do
Log.AddLine('Log occurred is '+E.Message+' : Step2 done');//Log occurred is "c:\progr~..jkdj.pas" at line [45]
end;
//....some code
try
Assert(1=0);
except
on E: Exception do
Log.AddLine('Log occurred is '+E.Message+' : Step3 done');//Log occurred is "c:\progr~..jkdj.pas" at line [53]
end;
//....some code
try
Assert(1=0);
except
on E: Exception do
Log.AddLine('Log '+E.Message+' : End');//Log occurred is "c:\progr~..jkdj.pas" at line [61]
end;
end;
das funktioniert gut die einzige Sache, dass es eine Ausnahme und den Code zu groß geworden erhöht, so kann ich nicht eine Funktion -siehe nächstes Beispiel Funktion LogMessage- und Call es an einem anderen Ort, da die Leitung die gleiche sein wird, immer auch wird der Dateiname sein, wo die LogMessage Funktion implementiert:
nicht funktionierendes Beispiel:
procedure LogMessage(AMessage: String);
var AFile, ALine: String;
begin
try
Assert(1=0); //line 29
except
on E: Exception do
begin
AFile:= Copy(E.Message, Pos(' (', E.Message)+2, Pos(', line ', E.Message)-Pos(' (', E.Message)-2);
ALine:= Copy(E.Message, Pos(', line ', E.Message)+7, Pos(')', E.Message)-Pos(', line ', E.Message)-7);
ShowMessage('Log occurred in file "'+AFile+'" at line ['+ALine+'] : '+AMessage);
end;
end;
end;
procedure AnyProcedure();
begin
LogMessage('Start'); //Log occurred in file "c:\progr~....jkashdj.pas" at line [29]
//....
LogMessage('step1'); //Log occurred in file "c:\progr~....jkashdj.pas" at line [29]
//....
LogMessage('step2'); //Log occurred in file "c:\progr~....jkashdj.pas" at line [29]
//....
LogMessage('step3'); //Log occurred in file "c:\progr~....jkashdj.pas" at line [29]
//....
LogMessage('end');
end
bitte helfen, und danke im voraus.
Übrigens ist 1 = 0 nicht der einfachste Ausdruck, der zu False ausgewertet wird. Das wäre, nun, Falsch. –
Danke auch für den Falschen Ausdruck, ich habe den Code sehr schnell geschrieben, ohne darüber nachzudenken, wie es aussehen wird - ich erinnere mich, dass ich es aus der Delphi-Hilfe kopiert habe. –