【发布时间】:2014-03-23 22:40:57
【问题描述】:
我有一个应用程序在调用FormatDateTime 时偶尔会返回整数溢出。我不知道是什么情况触发了这种情况,尽管我发现提到了问题here 和here。
我目前的解决方法是包装函数并处理异常:
function FormatDateTimeEx (const FormatString : ANSIString ;
DateTime : TDateTime) : ANSIString ;
begin
try
Result := FormatDateTime (FormatString, DateTime) ;
except
Result := '???' ;
end ;
end ;
这解决了导致编译的可执行文件崩溃的问题,但如果我在 IDE 中运行程序时调试器没有因EIntOverflow 异常而中断,我也更喜欢它。我不想通过告诉 IDE 忽略 EIntOverflow 异常来做到这一点,因为这样它不会在其他情况下发生未捕获的整数溢出时中断(对吗?)。
是否有一种编程方式(编译时或运行时)告诉 IDE 在本地忽略异常类,以应对可能发生异常的情况,并且您已经知道并正在处理它?
【问题讨论】:
-
了解实际问题并应用真正的解决方案不是更好吗?
-
我敢肯定,如果您提供 SSCCE,我们可以提供修复
-
只是猜测:您使用的
FormatDateTime不是线程安全的。尝试在整个应用程序中使用线程安全版本 -
@SirRufo,问题也可能出在“错误”的输入日期时间值上;例如这会导致除以 0 异常
FormatDateTime('', 10000000000);只是因为TDateTime类型是如此不安全。
标签: delphi exception delphi-2007 integer-overflow