Autor Téma: Uprava a nasazení unit system.pas  (Přečteno 864 krát)

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 432
  • Karma: 9
    • Verze Delphi: XE2
Uprava a nasazení unit system.pas
« kdy: 01-09-2021, 19:41:44 »
Lze upravit a zkompilovat unit system.pas v jedné konkrétní aplikaci 

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2972
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Uprava a nasazení unit system.pas
« Odpověď #1 kdy: 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?
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2972
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Uprava a nasazení unit system.pas
« Odpověď #2 kdy: 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
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2972
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Uprava a nasazení unit system.pas
« Odpověď #3 kdy: 01-09-2021, 20:23:07 »
Lepsi udelat run-time patch, pokud ti jde o nejakou konkretni vec.
Embarcadero MVP - Czech republic

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 432
  • Karma: 9
    • Verze Delphi: XE2
Re:Uprava a nasazení unit system.pas
« Odpověď #4 kdy: 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.  

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3286
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Uprava a nasazení unit system.pas
« Odpověď #5 kdy: 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 ;-)

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2972
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Uprava a nasazení unit system.pas
« Odpověď #6 kdy: 02-09-2021, 09:40:58 »
Excellent
Rated 1 time
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
Embarcadero MVP - Czech republic

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3286
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Uprava a nasazení unit system.pas
« Odpověď #7 kdy: 02-09-2021, 10:28:38 »
Kdyz pouzijes FastMM ve full debug modu...
Me vubec nenapadlo, ze by mohl existovat nekdo, kdo to nepouziva  :)

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 432
  • Karma: 9
    • Verze Delphi: XE2
Re:Uprava a nasazení unit system.pas
« Odpověď #8 kdy: 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
Může mi někdo poradit jakou  verzi FastMM  použít pro Delphi XE2 ?

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2972
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Uprava a nasazení unit system.pas
« Odpověď #9 kdy: 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
Může mi někdo poradit jakou  verzi FastMM  použít pro Delphi XE2 ?


https://github.com/pleriche/FastMM4
Embarcadero MVP - Czech republic

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1262
  • Karma: 51
    • Verze Delphi: 10.3
Re:Uprava a nasazení unit system.pas
« Odpověď #10 kdy: 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 :-)

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 432
  • Karma: 9
    • Verze Delphi: XE2
Re:Uprava a nasazení unit system.pas
« Odpověď #11 kdy: 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