我们的客户报告访问权限之一,不易重现。我们提供了日志记录机制。在检查日志时,我们注意到AV来自完全不同的不同操作。有时释放一个对象,有时在创建对象时有一些时间,同时调用sysutils.now()和许多其他操作。
我们对此感到困惑,在处理这个开发人员计算机时,我们也从sysutils.now()中提出了一个访问权限。
请注意,这是不可复制的。但是,如果我们考虑一段时间,我们的客户经常会获得访问权限。
我们正在使用eureka日志进行记录。在xp机器上发生问题。
计算机上安装的其他程序
Windows XP SP3, Office 2007, 的Winzip, 树液, Symantec防病毒和更新代理, Altiris客户, 思科VPN客户端& 我们的德尔福计划。
任何帮助或提示将不胜感激。
谢谢, 罗勒
答案 0 :(得分:2)
你应该在你的项目中使用FastMM4(我相信这实际上是最近的Delphi版本的一部分)。 FastMM4将捕获发生的泄漏和违规。您可能正遭受存储损坏,只能通过其对其他功能的影响来检测。
FastMM4有很多设置,所以请阅读文档
是的,它是免费的。答案 1 :(得分:1)
万一你想知道,这是now()
function Now: TDateTime;
{$IFDEF MSWINDOWS}
var
SystemTime: TSystemTime;
begin
GetLocalTime(SystemTime);
with SystemTime do
Result := EncodeDate(wYear, wMonth, wDay) +
EncodeTime(wHour, wMinute, wSecond, wMilliseconds);
end;
{$ENDIF}
....
procedure GetLocalTime; external kernel32 name 'GetLocalTime';
....
使用madexcept
你的错误肯定不存在。解决方案是将调试信息添加到您的应用程序中
我热烈建议购买MadExcept
(免费用于非商业用途):
http://madshi.net/madExceptDescription.htm
它将为您提供详细的堆栈跟踪(以人类可读的形式),您可以将其记录到文件中(或将自动通过电子邮件发送给您)。
在大多数情况下,这将为您提供追踪问题原因所需的信息
请注意,启用madexcept(完全)后,应用程序将运行缓慢,所以我建议您为客户端提供两个版本,这样他们就不必一直忍受缓慢。
答案 2 :(得分:0)
如前所述,如果没有一些源代码和更多背景知识,您可能很难满意地回答这个问题。
有一点需要注意:如果在释放对象时发生了对象,则该对象可能已被释放。如果您将手动对象清理与引用计数接口混合,则很容易发生这种情况。
nil
时就会发生。Free
是实例方法且实例不再存在。我也认为SysUtil.Now()可能是红鲱鱼。记录器更容易因内存损坏而感到困惑。
答案 3 :(得分:0)
当像Sysutils.Now这样简单的API开始崩溃时,我会开始寻找缓冲区溢出。这通常是最有可能的罪魁祸首。
如果是这种情况,callstack在找到问题的根源时几乎没用。我相信AQTime有一个工具可以追踪这类问题,但我从来没有将它用于此目的。