Forum Delphi.cz

Delphi => Obecné => Téma založeno: Jirka 01-09-2021, 19:41:44

Název: Uprava a nasazení unit system.pas
Přispěvatel: Jirka 01-09-2021, 19:41:44
Lze upravit a zkompilovat unit system.pas v jedné konkrétní aplikaci 
Název: Re:Uprava a nasazení unit system.pas
Přispěvatel: Radek Červinka 01-09-2021, 20:21:32
No jde, ale k cemu ti to bude?
dcc32.exe -O+ -Q -M -Y -Z -$D+ System.pas
a pak to dcu prihodis.

pokud ale zmenis rozhrani (tj. zmenis treba parametr funkce), tak vsechno co na system.pas zavisi - tj. vse, vcetne RTL musis buildnout taky.

Co presne chces udelat?
Název: Re:Uprava a nasazení unit system.pas
Přispěvatel: Radek Červinka 01-09-2021, 20:22:37
treba tady: https://stackoverflow.com/questions/4839532/recompiling-the-rtl-if-possible-then-how

nebo
https://chuacw.ath.cx/development/b/chuacw/archive/2020/09/03/command-line-used-to-compile-system-pas-in-delphi.aspx
Název: Re:Uprava a nasazení unit system.pas
Přispěvatel: Radek Červinka 01-09-2021, 20:23:07
Lepsi udelat run-time patch, pokud ti jde o nejakou konkretni vec.
Název: Re:Uprava a nasazení unit system.pas
Přispěvatel: Jirka 02-09-2021, 08:02:04
No jde, ale k cemu ti to bude?
dcc32.exe -O+ -Q -M -Y -Z -$D+ System.pas
a pak to dcu prihodis.

pokud ale zmenis rozhrani (tj. zmenis treba parametr funkce), tak vsechno co na system.pas zavisi - tj. vse, vcetne RTL musis buildnout taky.

Co presne chces udelat?

V procedure FinalizeUnits  pri ukoncovani aplikace občas dochází k vyvolání vyjimky Access violation
problém je že málokdy a jen u některých zákazníků . Největší problém je ale ten že se to volá v cyklu a prakticky to lze ukončít jen odstřelením procesu v seznamu uloh

A co bych chtěl udělat ?
V ideálním případě vložit do těla nějaký kod který mi odhalí kde ten problém vznikl a pokud to nepujde aspoň docílít toho aby se vyjimka nevyvolaval opakovane (v cyklu )

Pokud by mi mohl někdo skutečně pomoci vyřešit problém jednou provždy , nebráním se ani komerční spolupráci

Kód: Delphi [Vybrat]
  1. procedure FinalizeUnits;
  2. var
  3.   Count: Integer;
  4.   Table: PUnitEntryTable;
  5.   P: Pointer;
  6. begin
  7.   if InitContext.InitTable = nil then
  8.     exit;
  9.   Count := InitContext.InitCount;
  10.   Table := InitContext.InitTable^.UnitInfo;
  11. {$IFDEF LINUX}
  12.   Inc(PByte(Table), InitContext.Module^.GOT);
  13. {$ENDIF}
  14.   try
  15.     while Count > 0 do
  16.     begin
  17.       Dec(Count);
  18.       InitContext.InitCount := Count;
  19.       P := Table^[Count].FInit;
  20.       if Assigned(P) and Assigned(Pointer(P^)) then
  21.       begin
  22. {$IFDEF POSIX}
  23.         CallProc(P, InitContext.Module^.GOT);
  24. {$ENDIF POSIX}
  25. {$IFDEF MSWINDOWS}
  26.         TProc(P)();
  27. {$ENDIF}
  28.       end;
  29.     end;
  30.   except
  31.     FinalizeUnits;  { try to finalize the others }
  32.     raise;
  33.   end;
  34. end;
  35.  
Název: Re:Uprava a nasazení unit system.pas
Přispěvatel: pf1957 02-09-2021, 09:33:47
V procedure FinalizeUnits  pri ukoncovani aplikace občas dochází k vyvolání vyjimky Access violation
problém je že málokdy a jen u některých zákazníků
Ta pricina bude velmi pravdepodobne v tom, co psal Radek hned jako prvni odpoved. Kdyz jsem se letmo dival na ten stack trace, tak ta exception vznikne pri zavolani TfrxReport.Destroy.

Nevim, kolik tam mas reportu, ale ja bych to resil tak, ze bych si logoval jmena vytvarenych/rusenych reportu, klidne do extra souboru a v pripade exception bych se podival na jejich parovani: kazdemu volani Create musi odpovidat prave jedno Destroy a naopak. Pokud to dokazes vyvolat u sebe, tak by meli stacit breakpointy v debuggeru.

Samozrejme spolecny predek vsech reportu by ti usetril dost prace - proto se u slozitych veci s dlouhou zivotnosti vyplati mezi knihovny 3. stran a svuj kod vkladat interposed vrstvu ;-)
Název: Re:Uprava a nasazení unit system.pas
Přispěvatel: Radek Červinka 02-09-2021, 09:40:58
Kdyz pouzijes FastMM ve full debug modu, tak on umi detekovat opetovne uvolneni a napise odkud to bylo volane https://delphi.cz/post/FastMM4-a-detekce-prepisu-pameti.aspx (https://delphi.cz/post/FastMM4-a-detekce-prepisu-pameti.aspx)
Název: Re:Uprava a nasazení unit system.pas
Přispěvatel: pf1957 02-09-2021, 10:28:38
Kdyz pouzijes FastMM ve full debug modu...
Me vubec nenapadlo, ze by mohl existovat nekdo, kdo to nepouziva  :)
Název: Re:Uprava a nasazení unit system.pas
Přispěvatel: Jirka 02-09-2021, 10:59:33
Kdyz pouzijes FastMM ve full debug modu, tak on umi detekovat opetovne uvolneni a napise odkud to bylo volane https://delphi.cz/post/FastMM4-a-detekce-prepisu-pameti.aspx (https://delphi.cz/post/FastMM4-a-detekce-prepisu-pameti.aspx)
Může mi někdo poradit jakou  verzi FastMM  použít pro Delphi XE2 ?
Název: Re:Uprava a nasazení unit system.pas
Přispěvatel: Radek Červinka 02-09-2021, 11:13:58
Kdyz pouzijes FastMM ve full debug modu, tak on umi detekovat opetovne uvolneni a napise odkud to bylo volane https://delphi.cz/post/FastMM4-a-detekce-prepisu-pameti.aspx (https://delphi.cz/post/FastMM4-a-detekce-prepisu-pameti.aspx)
Může mi někdo poradit jakou  verzi FastMM  použít pro Delphi XE2 ?


https://github.com/pleriche/FastMM4 (https://github.com/pleriche/FastMM4)
Název: Re:Uprava a nasazení unit system.pas
Přispěvatel: vandrovnik 02-09-2021, 17:53:58
Kdyz pouzijes FastMM ve full debug modu...
Me vubec nenapadlo, ze by mohl existovat nekdo, kdo to nepouziva  :)

No, ehm, možná bych se na to měl podívat :-)
Název: Re:Uprava a nasazení unit system.pas
Přispěvatel: Jirka 29-09-2021, 16:48:28
Objevil jsem docela sikovny programek na správu  Fastmm direktiv
Trochu starší ale stále funkční ...
http://jedqc.blogspot.com/2007/07/new-fastmm4-options-interface.html (http://jedqc.blogspot.com/2007/07/new-fastmm4-options-interface.html)