-
2009-08-17
delphi 中“断言”的使用 - [技术交流]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://liuyangsl.blogbus.com/logs/44384729.html
像c#,java这样的语言编译后不是二进制代码,而是可以解释执行的一种东西,这样在我们调试的时候,如果出错了,报的错可以显示错误所在的堆栈,方法,行号(当然,你release编译或者把pdb调试文件去了就没行号了),而Delphi就不行了。如果你在异常处理里想把异常出现的堆栈,方法和行号输出出来简直是不可能的。但有个变通的方法,就是使用断言,断言在调试状态下可以指出错误行号。我们要先为断言失败事件挂接一个默认执行方法,如下。
procedure AssertErrorHandler(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer);
var
S: String;
begin
S := Format('%s (%s, line %d, address $%x)',
[Message, Filename, LineNumber, Pred(Integer(ErrorAddr))]);
OutputDebugString(PChar(S));
end;
initialization
AssertErrorProc := @AssertErrorHandler
然后你就可以使用断言了, Assert(pam1 <> nil,'参数为空');比如你的方法要传入一个pam1的参数,如果传进来的参数未定义,这个断言就会失败,从而触发断言失败事件,然后你就可以用debugview看到断言失败的行号了。
使用这个方法的不足就是,你只能获取可预期异常的信息,对未知异常无法使用了。随机文章:
delphi 线程的结束方式 2009-09-24《Linux下C语言编程入门》第五章 信号处理 2008-11-08《软件需求》第十七章 管理变更请求 2008-10-23《软件需求》第十一章 软件的质量属性 2008-10-16《软件需求》第一章 基本的软件需求 2008-10-11
收藏到:Del.icio.us







