Autor Téma: V jednom prípade mi aplikácia ukončuje s AV  (Přečteno 3342 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #30 kdy: 22-10-2019, 22:56:14 »
Tak som si tie FreeAndNil skontroloval a nič som nenašiel. Tebou uvedený typ príkladu tu určite nemám. Žiadnu takú techniku tu nepoužívam.
Mňa stále vytáča spôsob ako sa k AV dostanem. Vždy bez výnimky rovnako.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2611
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #31 kdy: 23-10-2019, 07:46:50 »
Dovolil bych si nesouhlasit. FastMM ma byt jako prvni jednotka v dpr,
Jj, s tim souhlasim. Ale setkal jsem se nekolikrat s chybami, ktere FastMM nechytal. Rekl bych, ze to bylo v pripadech, kdy finalization zaviralo/likvidovalo i jine prostredky nez ciste pamet jako nejaka spojeni apod. A mam dojem, ze neco podobneho jsem nekdy s nekym na foru resil, ale HOSIP

Citace
Navic dvojite uvolneni atd. se kontroluje v prubehu behu programu.
No je prave otazka, jestli i v pripade, kdy to poprve uvolnis za behu aplikace a podruhe pres dangling pointer ve finalize...

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2611
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #32 kdy: 23-10-2019, 07:58:10 »
function StdWndProc(Window: HWND; Message: UINT; WParam: WPARAM; LParam: WPARAM): LRESULT; stdcall;
...
{ In    ECX = Address of method pointer }
...
        MOV     EAX,[ECX].Longint[4]
        CALL    [ECX].Pointer
Jestli je tvoje informace presna, tak to ukazuje, ze se to snazi propagovat wokenni message do "okna", ktere uz neexistuje, coz by ukazovalo na to, ze se nekdo neco zrusi, ale v pumpe zprav pro to zustanou nejake nedorucene zpravy. Nerusi nejaky form sam sebe pomoci Free?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #33 kdy: 23-10-2019, 09:24:27 »

Citace
Nerusi nejaky form sam sebe pomoci Free?
Ak myslíš
Kód: Delphi [Vybrat]
  1. procedure TfrmFOC.FormClose(Sender: TObject; var Action: TCloseAction);
  2. begin
  3.   oGlobalVar.AdaptRibbon.DoAdaptActions;
  4.   Action := caFree;
  5. end;
tak áno. Okrem pár výnimiek všade. Všetky som vyhodil. Nedostanem AV, ale debuger ostane visieť na
Kód: Delphi [Vybrat]
  1. Module Load: imagehlp.dll. No Debug Info. Base Address: $75E80000. Process JasotSVB.exe (2016)
  2. Module Load: dbghelp.dll. No Debug Info. Base Address: $74FA0000. Process JasotSVB.exe (2016)
a môžem urobiť jedine reset (Ctrl+F2)
Práve som dostal oznam Memory Leak Dected. Preto som nemohol ukončiť aplikáciu. Možno z toho niečo zistím. Aspoň sa je konečne čoho chytiť. Dávam to do prílohy
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #34 kdy: 23-10-2019, 09:36:47 »
FastMM mi vygeneroval 260 MB súbor ;D
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2391
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #35 kdy: 23-10-2019, 10:42:25 »
FastMM mi vygeneroval 260 MB súbor ;D

Tak ho zipni a dej treba na letecka posta nebo tak.
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #36 kdy: 23-10-2019, 12:16:37 »
Citace
Tak ho zipni a dej treba na letecka posta nebo tak.
V tomto štádiu to je úplne zbytočné. Stačí príloha v príspevku vyššie.
Ešte som to ani neanalyzoval. To idem urobiť teraz.
No mám jednu otázku:
Vo výpise sa objavujú všetky podformuláre. Tie vytváram vo formulári a inštancie ukladám do "vlastných" premenných. Uvoľňujem ich vo FormDestroy. Je to to správne miesto? Podľa helpu áno. Nie je vhodnejšie to dať do FormClose?
Kód: Delphi [Vybrat]
  1. type
  2. ...
  3.   strict private/public
  4.     sbfBuildingType: TfrmsubBuildingType;
  5.  
  6.  
  7. procedure TfrmFOC.CreateObjects;
  8.   sbfBuildingType := TfrmsubBuildingType.CreateAsSubform(jstpnlBuildingType);
  9.  
  10.  
  11. procedure TfrmFOC.FormDestroy(Sender: TObject);
  12. begin
  13.   FreeAndNil(sbfBuildingType);
  14.  
  15.  
  16. class function TfrmsubBuildingType.CreateAsSubform(const AParentPanel: TjstAdvPanel): TfrmsubBuildingType;
  17. begin
  18.   Result := TfrmsubBuildingType.CreateForm;
  19.   oBuildingType := TBuildingType.CreateForm(Result, Result.fdtblBuildingType, AParentPanel, Result.jstpnlBuildingTypeEdit);
  20.   oGlobalVar.AddObjects(oBuildingType);
  21.   Result.Show;
  22. end;

Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 811
  • Karma: 45
    • Verze Delphi: 10.3
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #37 kdy: 23-10-2019, 12:18:23 »
No a nedopadne to náhodou tak, že je uvolníš jednou Ty a podruhé nějaký ten panel nebo formulář, pod které je zařadíš?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #38 kdy: 23-10-2019, 12:28:12 »
Už mi v náznaku začalo niečo také vŕtať v hlave. Idem na to.
V konečnom dôsledku je výsledok ten istý. Ale FastMM vygeneroval 440 MB.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #39 kdy: 23-10-2019, 12:41:55 »
Citace
Ale FastMM vygeneroval 440 MB.
Beriem späť. Nakopíroval som si nový konfiguračný súbor a nenastavil som vyčistenie log súboru. Teraz to je 107. Menej ako polovica.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #40 kdy: 23-10-2019, 12:46:52 »
Koniec výpisu:
*********
1 - 4 bytes: Unknown x 4
5 - 12 bytes: TGlyphCache x 1, TMoveArrayManager<AdvEdit.TAdvEdit> x 1, TGlyphCache x 1, TMoveArrayManager<PatternFlat.TPatternFlatRoom> x 5, TParaAttributes x 4, TMoveArrayManager<Room.TFlatRoom> x 5, TMoveArrayManager<Data.DB.TDataLink> x 17, TMoveArrayManager<System.IInterface> x 24, TObject x 25, TMoveArrayManager<Data.DB.TDataSource> x 24, TMoveArrayManager<Data.DB.TField> x 74, TMoveArrayManager<System.Classes.TBasicActionLink> x 154, TMoveArrayManager<System.Actions.TContainedAction> x 14, TMoveArrayManager<Data.DB.TDataSet> x 20, TMoveArrayManager<System.Classes.TComponent> x 860, TMoveArrayManager<System.Classes.TCollectionItem> x 330, TMoveArrayManager<System.string> x 62, TMoveArrayManager<System.Variant> x 106, TMoveArrayManager<System.Integer> x 106, Unknown x 1092
13 - 20 bytes: TDbgList x 3, TThreadList x 1, TBits x 4, TAutoCorrect x 4, TIntList x 12, TCharStyle x 4, TTextAttributes x 8, TObservers x 107, TFDRefCounter x 72, TFDBuffer x 48, TFDEncoder x 24, TThreadList<System.IInterface> x 24, TFieldOptions x 24, TAutoSize x 102, THTMLPictureCache x 124, TList x 2409, TChangeLink x 358, TFDColMapItem x 144, UnicodeString x 228, Unknown x 759
21 - 36 bytes: TPagerTabScroller x 1, TGradientBackground x 12, TList<PatternFlat.TPatternFlatRoom> x 5, TPatternFlatRoom x 50, TCodeFolding x 4, TAdvUndoList x 4, TAdvActiveLineSettings x 4, TMemoLines x 4, TAdvMarkers x 4, TAdvMarkerList x 4, TDBGridLookupDataLink x 4, TDBColumnCollection x 4, TPersistence x 3, TDisjunctDateTimeItem x 6, TDisjunctDateTimeArray x 6, TPersistence x 6, TList<Room.TFlatRoom> x 5, TImageMargins x 100, TFlatRoom x 50, TComponent.GetObservers$942$ActRec x 107, TIconImage x 22, TStringTreeOptions x 14, TVTFixedAreaConstraints x 14, TScrollBarOptions x 14, TList<System.Actions.TContainedAction> x 14, TPersistence x 185, TPanelPosition x 102, TAdvHintInfo x 216, TMemoryStream x 733, TFDMapRules x 24, TFDDAptColumnMappings x 24, TFDDatSUpdatesJournal x 24, TList<System.IInterface> x 24, TInterfaceList x 24, TFDAggregates x 48, TFDIndexes x 24, TCheckConstraints x 24, TList<Data.DB.TDataSource> x 24, TList<Data.DB.TField> x 74, TFields x 48, TList<System.Classes.TBasicActionLink> x 154, TPadding x 1072, TList<Data.DB.TDataSet> x 20, TTouchManager x 1353, TSizeConstraints x 1353, TMargins x 1353, TList<Data.DB.TDataLink> x 17, TActionClientLink x 274, TButtonProperties x 274, TList<System.Classes.TCollectionItem> x 330, TList<System.Classes.TComponent> x 860, TPen x 1298, TBrush x 2370, TList<System.Integer> x 106, TList<System.string> x 62, TList<System.Variant> x 106, UnicodeString x 1728, Unknown x 2406
37 - 52 bytes: TObjectList<AdvEdit.TAdvEdit> x 1, TVistaBackground x 12, TTabProgress x 11, TUILanguage x 4, TPrintOptions x 4, TDBGridDataLink x 4, TMemoStrings x 4, TGDIPStatus x 12, TAdvSmoothCalendarDateWeekNumbers x 12, TLookupSettings x 6, TComboBoxStrings x 103, TDictionary<System.Integer,System.Classes.IInterfaceList> x 107, TGroupBoxCheck x 12, TListBoxStrings x 191, TGlassFrame x 22, TFieldDef x 144, TFDParams x 24, TFDMacros x 24, TFDDatSTableList x 24, TFDDatSRelationList x 24, TPicture x 14, TActionBars x 28, TActionClients x 30, TFont x 3589, TVTDragManager x 13, UnicodeString x 670, Unknown x 250
53 - 68 bytes: TPagerTabSettings x 1, TRichEditStrings x 4, TSplitterAppearance x 3, TAdvSmoothCalendarFooter x 12, TAdvSmoothCalendarHeader x 12, TAdvDBComboBoxStrings x 4, TButtonGlyph x 100, TFDBottomResourceOptions x 24, TFDFetchOptions x 24, TFDOptionsContainer x 24, TIndexDefs x 24, TFieldDefs x 24, TVTDragImage x 28, TActionBarItem x 30, TLookupSettings x 185, TPanelStatusBar x 102, TBitmap x 933, TIcon x 22, TAdvImage x 102, TFDIndex x 57, UnicodeString x 316, Unknown x 178
69 - 84 bytes: TWorkerThread x 1, TAdvStylerList x 4, TAutoCompletion x 4, TAdvSmoothDatePickerCalendar x 6, TDBColumnItem x 5, TButtonGlyph x 46, TVTColors x 14, TVirtualTreeColumns x 14, TFieldDataLink x 81, TControlScrollBar x 44, TFDBottomUpdateOptions x 24, TFDFormatOptions x 24, TFDDatSManager x 24, TFDParam x 12, UnicodeString x 98, Unknown x 152
85 - 100 bytes: TCustomAdvOfficePagerStyler x 1, TAdvGutter x 4, TTimer x 21, TAdvGDIPPicture x 336, TCanvas x 100, TFDStringList x 96, TFDMasterDataLink x 24, TFieldList x 24, TFieldDefList x 24, TClipboardFormats x 14, TGDIPPicture x 249, TStringList x 636, UnicodeString x 14, Unknown x 1
101 - 116 bytes: TAdvSmoothCalendarDateAppearance x 12, TDataSource x 17, TFDDAptTableAdapter x 24, TControlCanvas x 1003, TBitmapCanvas x 195, UnicodeString x 4, Unknown x 6
117 - 132 bytes: TPageButtonSettings x 1, TAdvMemoStrings x 4, TActionClientItem x 274, TVirtualTreeColumn x 55, TVTHeader x 14, TBitmapImage x 428, UnicodeString x 1, Unknown x 3
133 - 148 bytes: TPopupMenu x 14, Unknown x 14
149 - 164 bytes: TGlowButtonAppearance x 1, TImageList x 4, TFDTableAdapter x 24, TThemedColorMap x 14, TPanelCaption x 102, UnicodeString x 1, Unknown x 11
165 - 180 bytes: TTabAppearance x 12, TGlyphList x 4, TAction x 154, TGDIPFill x 168, UnicodeString x 1
181 - 212 bytes: TMenuItem x 132, UnicodeString x 6, Unknown x 20
213 - 244 bytes: UnicodeString x 3, Unknown x 17
245 - 276 bytes: TDateField x 6, TSmallintField x 23, TActionManager x 14, TStringField x 56, TIntegerField x 40, UnicodeString x 2, Unknown x 8
277 - 308 bytes: TBCDField x 1, TCurrencyField x 6, TFDCommand x 24
309 - 340 bytes: UnicodeString x 1
341 - 388 bytes: UnicodeString x 5, Unknown x 1
389 - 436 bytes: UnicodeString x 1
437 - 484 bytes: TLabel x 37, TSpeedButton x 6, Unknown x 1
485 - 532 bytes: TDateLabel x 1, TLabelEx x 4, TDropGridListButton x 4, TAdvSmoothSpeedButton x 6, TAdvTimerSpeedButton x 30, TCustomAdvEditLabel x 53, TAdvLabel x 4, TThemedButtonControl x 133, Unknown x 5
533 - 596 bytes: TAdvSplitter x 3
597 - 660 bytes: Unknown x 2
661 - 740 bytes: TPagerEdit x 1, THintWindow x 4, TScrollBar x 8, TAdvSpinButton x 15, TAdvGroupBox x 10, TUpDown x 6, TSmoothEditButton x 6, TListHintWindow x 6, TPanel x 21, TListHintWindow x 185, Unknown x 1
741 - 820 bytes: TAdvOfficeRadioButton x 4, TAdvOfficeRadioGroup x 1, TAdvOfficeCheckBox x 3, TListBox x 6, TDBAdvOfficeCheckBox x 7, TAdvGroupButton x 8, TAeroButton x 100, TListBoxTab x 185, Unknown x 1
821 - 916 bytes: TAdvOfficePage x 11, TFDQuery x 8, TRichEdit x 4, TActionToolBar x 14, TDBAdvOfficeRadioGroup x 1
917 - 1012 bytes: TDropDownForm x 6, TFDTable x 16, TAdvHintForm x 4
1013 - 1124 bytes: TfrmsubBlock x 1, TfrmsubBuildingType x 1, TfrmsubOwnershipInterest x 1, TAdvDBLookupComboBox x 4, TDBAdvSpinEdit x 5, TAdvDBComboBox x 4, TAdvSpinEdit x 10, TjstAdvPanel x 96, TfrmsubRoomTitle x 1, TAdvEdit x 131, TAdvComboBox x 103, Unknown x 4
1125 - 1236 bytes: TfrmsubEntry x 1, TfrmsubFOCList x 1, TfrmsubFlat x 1, TAdvSmoothCalendar x 6, TjstDBDatePicker x 6, TfrmsubSubAccount x 1, TDBAdvEdit x 54
1237 - 1364 bytes: TfrmsubPatternFlat x 1, TfrmsubBankAccount x 1, TAdvOfficePager x 1, TfrmFOC x 1, TDBAdvSmoothDatePicker x 6
1365 - 1508 bytes: TfrmsubRoom x 1
1509 - 1668 bytes: TDBAdvMemo x 4
2245 - 2468 bytes: TjstVirtualStringTree x 14
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #41 kdy: 23-10-2019, 12:53:13 »
Citujem zo stránky, z ktorej som čerpal ako na subform - Delphi.cz
**
A zrušení obdobně pod nějakou událost (nebo se o vymetení postará parent resp. jeho owner tj. nadřízený form)  if Assigned(fFlow) then    //před tím může být volání úklidových metod subformu atp. a potom úklid na nadřízeném formuláři (např. zneviditelnění toho panelu)    FreeAndNil(fFlow); ???
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2611
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #42 kdy: 23-10-2019, 13:17:44 »
  Action := caFree;
Tim by to byt nemelo, protoze reakci na caFree je volani Release. Jestli jsi to zakomentoval, tak se temi memory leaky nezabyvej. Spis to zakomentovavej postupne, abys zjistil, ktery formular ti to AV dela (pri zakomentovani by se ti mel mistop AV objevit memory leak). A pak je to dalsi otazka zkoumani, co bude ten inkriminovany  formular zac.

BTW, to se ti zacalo objevovat az po prechodu na vnorene formulare, nebo ty jsi pouzival uz pred tim?

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2391
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #43 kdy: 23-10-2019, 13:20:28 »
...
2245 - 2468 bytes: TjstVirtualStringTree x 14
No evidentne se neuvolnuji stromy a to vim ze je pouzivas na zobrazeni dat, takze se podivej co uvolnuje

FreeAndNil(sbfBuildingType); a zda se vubec zavola.
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #44 kdy: 23-10-2019, 13:59:16 »

Citace
BTW, to se ti zacalo objevovat az po prechodu na vnorene formulare, nebo ty jsi pouzival uz pred tim?
Podformuláre používam realtívne dlho. Ale až teraz som zistil, že čosi nie je v poriadku. Predtým mi memory leak nevypisovalo! Medzitým som:
  Oddelil triedy od formulárov do samostatných jednotiek
  + iné veci (keby som si pamätal čo všetko :'( ), ktoré by na to nemali mať vplyv. Ale či naozaj :-\ ?
Kód: Delphi [Vybrat]
  1.   if Assigned(sbfBuildingType) then
  2.     FreeAndNil(sbfBuildingType);
Nevolá sa, lebo ho už uvoľnil vlastník. Ale ich obsah (komponenty) ostáva zachovaný.
Action := caFree; som na skúšku vložil do jedného formulára a nevidím žiadnu zmenu.
Otázky sú:
  • prečo sa mi obsah formulárov nezničí
  • ako to dosiahnuť, keď Action := caFree; je bez účinku
Už to mám. Action := caFree; je potrebné vložiť do formulára, ktorý vlastní podformuláre. Memory leak nie je.
Do riti, AV ostalo. To je snáď začarované.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.