Pytanie o debuger Delphi

0

Cześć, zrobiłem w swoim programie głupi błąd kod poniżej

type
  TFrame_ProductAddEdit = class(TFramePlus)
 public
    procedure AfterCreation; override;
    procedure BeforeDestroy; override;
 end;

var
   DirList: TList<String>;

procedure TFrame_ProductAddEdit.AfterCreation;
begin
  inherited;
  DirList        := TList<String>.Create;
end;

procedure TFrame_ProductAddEdit.BeforeDestroy;
begin
  DirList.Free;
  inherited;
end;

Podczas tworzenia 2 obiektów TFrame_ProductAddEdit i przy wyłączaniu programu otrzymywałem błąd "delphi debugger notification" lub czasami EInvalidPointer ciężko mi było namierzyć ten błąd bo delphi w przypadku wyboru polecenia break; nie odwoływało się do kodu gdzie błąd nastąpił - nic nie pokazywał. Pytanie dlaczego nie odnosił się do linii DirList.Free; gdzie DirList 2 raz chciał być zwolniony co dawało błąd?

Co ciekawe TFrame_ProductAddEdit było tworzone na zakładkach TabSheet i podczas zamykania zakładek w czasie działania programu nie pojawiał się żaden błąd a DirList.Free; było wywoływane kilka razy.

0

A co się dzieje gdybyś wrzucił to do Create i Destroy ?

1

a jaki masz ustawiony build configuration? - debug czy release?

0

Wiem, że to chamskie rozwiązanie ale zobacz zamiast:

DirList.Free;

zrób

if ( DirList <> nil ) begin
  DirList.Free;
  DirList := nil ;
end;

i zobacz co się dzieje ... Bo to może nie to miejsce jest "kłopotogenne"

0

a jaki masz ustawiony build configuration? - debug czy release?

oczywiście debug. Dodatkowo Fastmm4,EurekoLog lub madExcept też nie znajduje gdzie jest błąd. Odnosi się tylko do kodu w assemblerze do procedury "call System.Error"

title

Natomiast wykonanie takiego kodu z np buttona sygnalizuje błąd i lokalizację poprawnie;

var
  list : TList<integer>;
begin
 list := TList<integer>.Create;
 list.Free;
 list.Free; 
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1