我想在我的程序上創建一個日誌系統,它將在文本文件上記錄調試消息,並且我想在代碼中保存日誌消息所調用的確切位置,但我不想使用Assert函數,因爲它會創建異常,並且此係統不僅用於記錄異常,還必須編寫一些調試信息。德爾福:如何獲得(當前代碼行,當前單位,當前功能),而不使用斷言?
例如usning斷言:
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;
這工作得很好,它拋出一個異常,併成爲太大的代碼的唯一的事情,所以我不能使用的功能 - 請參見下面的例子功能LogMessage-和呼叫它在另一個地方,因爲行會總是相同也文件名稱將是其中的LogMessage函數來實現:
不靈例如:
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
請幫助,並提前致謝。
順便說一句,1 = 0不是評估爲False的最簡單表達式。那會是假的。 – 2013-05-09 10:59:53
非常感謝False的表達,我很快就寫了代碼,沒有想到它會如何看起來像我記得我從德爾福的幫助中複製它。 – 2013-05-09 13:05:33