我有一个程序在关机时开始崩溃。调试器显示:
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class $C0000005 with message 'access violation at 0x00a69099: read of address 0x70687efe'.
当我单击继续时,我看到了同样的错误。当我单击“中断”时,IDE 将打开 EMemLeaks.pas 单元。
该程序在“调试”模式下编译,包含所有调试信息。地图文件设置为详细信息。
此外,我只在我的代码中使用 FreeAndNil 而不是 Free(但不在 3rd 方库中)。
在以下情况下不会出现崩溃:
- Eureka 插件被禁用或
- Eureka 插件被启用并且程序在 IDE 之外运行
崩溃出现在“Application.Run”之后的某个地方。这意味着我所有的清理代码都被执行了。正确的?
问题:
1. 以上设置是否正确?如果不是,要改变什么?
2. 调试器无法将光标放在产生问题的代码上是什么意思?
3. 这是否表明错误在我的代码之外?
更新(条条大路通尤里卡):
我设法删除了我项目中的所有代码。这就是剩下的:
INTERFACE
USES
Winapi.Windows, Vcl.Forms, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.Controls, Vcl.ExtCtrls, System.Classes,
IdAntiFreeze, IdFTP, IdGlobal, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, Vcl.Grids;
TYPE
TfrmDownloader = class(TForm)
pgCrtl : TPageControl;
Splitter : TSplitter;
tabMain : TTabSheet;
lblTop : TLabel;
pnlGrid : TPanel;
Panel1: TPanel;
IdFTP1: TIdFTP;
btnUpdates: TButton;
StringGrid1: TStringGrid;
Panel2: TPanel;
btnDownStart: TButton;
RichEdit1: TRichEdit;
private
protected
public
end;
VAR
frmDownloader: TfrmDownloader;
IMPLEMENTATION {$R *.dfm}
end.
该项目仍然崩溃。
更重要的是,运行一个名为 GenerateCrash 的程序将生成与我关闭程序(并且 Eureka 处于活动状态)时得到的完全相同的 AV:$C0000005。
procedure GenerateCrash;
VAR T: TObject;
begin
EmptyDummy;
FreeAndNil(T);
T.ClassName;
end;
让你思考。正确的?另外,EurekaLog 支持放弃了这个问题。可能他们现在知道了这个问题,它将在未来的某个版本中得到修复(我将无法访问)。我看到在每个版本中,他们都列出了很多严重的错误。自“v7.0 Hot-fix 1”发布以来,他们引入了 110 个功能并修复了 271 个错误。基本上,随着每个新功能的介绍,他们还引入了近 3 个错误!EurekaLog 必须是有史以来最有缺陷的软件产品之一!