1)函数原型
Delphi内置(system内部函数)了Assert调试过程,语法是如下
procedure assert(condition:boolean;[Message:string]);
如果cond为false,那么显示错误信息msg,并且触发异常(可在IDE里中断)。
2)处理函数:
TAssertErrorProc = procedure (const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer);
因为这个函数是编译器内置的,里面提供了源代码文件名、行号的信息,所以可以通过重写这个函数,完成日志记录的功能;示例如下所示:
procedure MyAssertProc(const Message, Filename: string;
LineNumber: Integer; ErrorAddr: Pointer);
Var
runErrMsg:String;
begin
runErrMsg := format('Error: %s, in file(%d): %s, Addr: %p',
[Message, LineNumber, FileName, ErrorAddr]);
if IsConsole then
Writeln(runErrMsg)
else
MessageBox(0, pChar(runErrMsg), 'Error Log by AssertLogs', 0);
end;
initialization
oldAssertErrorProc := AssertErrorProc;//保存旧的处理函数
AssertErrorProc:=@MyAssertProc;//使用自定义的处理函数替代原先的处理函数
finalization
AssertErrorProc := oldAssertErrorProc;//恢复旧的处理函数
3)条件编译:Assert directives (Delphi)
Type
|
Switch
|
Syntax
|
{$C+} or {$C-} {$ASSERTIONS ON} or {$ASSERTIONS OFF}
|
Default
|
{$C+} {$ASSERTIONS ON}
|
Scope
|
Local
|