シャットダウン時にクラッシュし始めたプログラムがあります。デバッガーには次のように表示されます。
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class $C0000005 with message 'access violation at 0x00a69099: read of address 0x70687efe'.
[続行] をクリックすると、同じエラーが表示されます。「Break」をクリックすると、IDE は EMemLeaks.pas ユニットを開きます。
プログラムは、すべてのデバッグ情報を含めて「デバッグ」モードでコンパイルされます。マップファイルは詳細に設定されています。
また、私のコードでは Free の代わりに FreeAndNil のみを使用します (ただし、サードパーティのライブラリでは使用しません)。
次の場合、クラッシュは表示されません:
- 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 は、これまでで最もバグの多いソフトウェア製品の 1 つに違いありません!