Aplikace z D6 občas zamrzne a hlásí "not responding"

Autor Téma: Aplikace z D6 občas zamrzne a hlásí "not responding"  (Přečteno 7463 krát)

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Zdravím zkušené programátory,

narazil jsem na zvláštní chybu, která se velmi špatně reprodukuje a objevuje se pouze u Wondows 7 (64bit). Aplikace generovaná v D6 (všechny service packy), využívající PVI komunikaci s CNC, několik DB Paradoxů, COM komunikaci, otevírání / zavírání souborů, canvas kreslení atd.. občas zamrzne (někdy zešedne, někdy ne) a přestane reagovat. Task manager hlásí, že aplikace "not responding". Vytížení aplikace je skoro na nule. Ve Windows XP se tento problém nikdy neobjevil.

Nesetkal jste se někdo s něčím podobným? Budu rád i za radu, jak zdebugovat tento problém.

Děkuji.


Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2013
  • Karma: 89
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #1 kdy: 22-06-2015, 12:19:03 »
D6 jeste neumi remote debugger?  http://delphi.cz/post/Remote-debugging-Delphi.aspx

Pokud ne, tak zkus aspon pres process explorer od system internals, kliknout na process a tam se zobrazovat stack kde ktere vlakno prave je. Z toho se dá nekdy přímo, jinak pak přes http://delphi.cz/post/Posledni-pomoc-pri-ladeni.aspx nebo  přes map soubor zjistit co se děje.

Navíc ten Process explorer ti ukáže v jakém stavu to vlákno(a) jsou, je tam vidět třeba že čeká na signál atd.
Embarcadero MVP - Czech republic

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #2 kdy: 22-06-2015, 12:26:09 »
Momentálně máme aplikaci připojenou přes remote debugger a snažíme se ji dostat do chybového stavu. Vyházeli jsme z projektu všechny ProcessMessages. Používáme ale hojně HandleMessage, jehož délku omezujeme Timerem (jakési čekací smyčky).

EDIT:
Tak se nám podařilo nasimulovat vytuhnutí aplikace, ale cca po 10 sekundách se sama ukončila (což se nestávalo) a Delphi nezahlásil nic, pouze ukončil vzdálený debug.
« Poslední změna: 22-06-2015, 12:34:17 od age.new »

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #3 kdy: 22-06-2015, 13:26:42 »
Aplikace opět vytuhla a Delphi zahlásilo chybu Access violation at address 00526FCC in module "coreide60.bpl". Read of address 000000B4.

Remote debuger se v tu chvíli shodil a nelze se zpětne připojit k procesu pro získání nějaký detailů.

Nějaký tip?

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2013
  • Karma: 89
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #4 kdy: 22-06-2015, 13:32:17 »
Aplikace opět vytuhla a Delphi zahlásilo chybu Access violation at address 00526FCC in module "coreide60.bpl". Read of address 000000B4.

Remote debuger se v tu chvíli shodil a nelze se zpětne připojit k procesu pro získání nějaký detailů.

Nějaký tip?


Zkus ten process explorer, viz. screenshot
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2013
  • Karma: 89
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #5 kdy: 22-06-2015, 13:40:42 »
Muzes zkusit http://www.ollydbg.de/, umi attach do processu, a umi zpracovavat Borland debug info, aspon pro starsi verze.
Embarcadero MVP - Czech republic

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #6 kdy: 22-06-2015, 13:58:47 »
Jak je aplikace nainstalována, do kterého adresáře? V jakých adresářích jsou dll soubory které používá? Jsou 32-bitové stejně jako aplikace? Někde jsem kdysi vygůglil, že Windows  mají pro běh 32 b. aplikace na 64 b. OS nějaký engine a musí se dodržovat nějaký pravidla. Nejvíc mne překvapilo, že v adresáři System32 mají být 64 b. dll.

hu

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #7 kdy: 22-06-2015, 14:08:03 »
Aplikace se neinstaluje, využívá DBE database a je v adresáři na disku C. Windows 7 jsou Embedded, UAC vypnuté, bez firewallu a antiviru.


Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 123
  • Karma: 8
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #8 kdy: 22-06-2015, 14:32:00 »
A VCLFixPack používáš: http://andy.jgknet.de/blog/bugfix-units/vclfixpack-10/

D6 jsou už dost staré a težko říct co to udělá ve W7.

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #9 kdy: 22-06-2015, 16:06:17 »
Spouští se aplikace v nějakém režimu kompatibility?

hu

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #10 kdy: 23-06-2015, 08:05:11 »
Nepodařilo se nám na Win 7 64bit nainstalovat úspěšně Delphi 6 (i s SP) + komponenty. Z nějakého důvodu Delphi nevidí bpl soubory, které mají správnou cestu a fyzicky tam i jsou. Komponenty hlásí chyby a run aplikace končí chybami. Možná proto zlobí i Remote debug ... nevím.

Online pf1957

  • Padawan
  • ******
  • Příspěvků: 2165
  • Karma: 116
    • Verze Delphi: D2007, XE3, DX10
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #11 kdy: 23-06-2015, 08:20:30 »
Nepodařilo se nám na Win 7 64bit nainstalovat úspěšně Delphi 6 (i s SP) + komponenty. Z nějakého důvodu Delphi nevidí bpl soubory, které mají správnou cestu a fyzicky tam i jsou. Komponenty hlásí chyby a run aplikace končí chybami. Možná proto zlobí i Remote debug ... nevím.
D6 jsou z ery W2000... Taky mi nesla na W8.1 nainstalovat rada zastaraleho softu, ktery jeste na W7 bezel, tak jsem se s nim musel rozloucit.

Pokud neexistuji nejake objektivni prekazky napr. ze neni dostupne k testovani nejake prostredi ci HW (coz byl napr. osud naseho softu, kdyz jsme zustali viset v D2007 a unicodifikovat jsme nemohli, protoze bychom radu veci nemeli jak otestovat a do ostreho provozu by nas s tim nikdo nepustil), tak bych migroval na soucasnou verzi Delphi.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2013
  • Karma: 89
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #12 kdy: 23-06-2015, 09:09:28 »
Nepodařilo se nám na Win 7 64bit nainstalovat úspěšně Delphi 6 (i s SP) + komponenty. Z nějakého důvodu Delphi nevidí bpl soubory, které mají správnou cestu a fyzicky tam i jsou. Komponenty hlásí chyby a run aplikace končí chybami. Možná proto zlobí i Remote debug ... nevím.

Mám pro testování i D5 ve Windows 7 64bit, musis instalovat napr. do c:\delphi5 pak to bez problémů jde. To proč to dělat je ale druhá věc.
Embarcadero MVP - Czech republic

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #13 kdy: 23-06-2015, 09:13:34 »
Máme D6 instalováno mimo program files. To proč nevidí bpl soubory které mají správně nastavenou cestu a fyzicky tam skutečně jsou - to mi hlava nebere. 

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #14 kdy: 23-06-2015, 10:03:00 »
TAK NOVÉ POZNATKY Z TESTOVÁNÍ:

ve Windows XP vše funguje v pořádku. Problém nastává jen u Windows 7!

Chybu zamrznutí aplikace vyvoláme takto:
Máme formulář na kterém kreslíme na canvas Paintboxu. Jakmile zobrazíme nové okno (menší a přes ten canvas), které si převezme focus (modrá horní lišta okna) a klikneme na spodní menu (které v tu chvíli focus nemá) tak dojde k zamrznutí.

Nějaká rada?

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 432
  • Karma: 17
    • Verze Delphi: D2007, XE3
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #15 kdy: 23-06-2015, 10:06:48 »
Remote debuging mi tiez hodne intenzivne padal vo viacerych verziach delphi. Prestal som ho pouzivat. Ak sa ti nepodari naistalovat delfinu do toho pecka, tak ostava este dalsia moznost, ale moze byt v celku dost pracna. Urobit nejaky logger z ktoreho zistis co aplikacia robila naposledy pred tym nez zamrzla. Nemusis hned napisat logging pre celu apku, napriklad len loguj dookola v akych stavoch sa ti nachadzaju jednotlive vlakna. Postupne ta to zacne navadzat na miesta kde vznika problem a prave v tych miestach mozes postupne zintenzivnovat logging. Stalo sa mi vsak uz aj to, ze sa to zvyklo hryznut stale na inom mieste. A po chvili sme zistili ze problemom bol hardver samotneho pecka ktory zacinal postupne kolabovat a do niekolkych dni umrel uplne.

Dalsia vec ktoru by som odporucil mozno este viac je MadExcept. MadExcept prinasa so sebou jednu velmi sikovnu utilitku, dokaze trejsovat procesy ktore boli s madexceptom skompilovane. Myslim ze to funguje nejako tak ze kazda aplikacia skompilovana s madexceptom vytvara v ramke nejaky MMF subor kde su rozpisane vsetky podsatne udaje o procese vlaknach a stackoch. A ked to skompilues so vsetkym potrebnymi debug datami tak ti to ukazuje aj velmi luxusne unitu, nazov funkcie a cislo riadka kde sa to vlakno prave tula. Je to plateny produkt ale da sa pre nekomercne pouzitie vyskusat zdarma. Taketo moznosti budu mat mozno aj ine debug tooly (eurekalog, jcldebug a pod), ale vsimol som si toho predovsetkym u madexceptu. Je to featurka jak cukrik ;)

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 123
  • Karma: 8
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #16 kdy: 23-06-2015, 10:16:32 »

Nějaká rada?

A ten fixpack jsi zkoušel? Stačí dát do uses a zkusit. My bez něho nedáme nic z D7 ven.

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #17 kdy: 23-06-2015, 10:37:09 »
Fixpack nezabral.

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #18 kdy: 23-06-2015, 10:57:57 »
Mě by zajímalo, jestli to jede na 32-bitových Windows 7. Pořád mám pocit, že těm 64-bitovým děláš něco nekorektního.

hu

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 123
  • Karma: 8
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #19 kdy: 23-06-2015, 10:59:34 »
Fixpack nezabral.

Ještě jaký je tam manifest. Případně komponenty na těch formech. Případně jsou tam Hinty?

Online pf1957

  • Padawan
  • ******
  • Příspěvků: 2165
  • Karma: 116
    • Verze Delphi: D2007, XE3, DX10
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #20 kdy: 23-06-2015, 11:06:02 »
Chybu zamrznutí aplikace vyvoláme takto:
Máme formulář na kterém kreslíme na canvas Paintboxu. Jakmile zobrazíme nové okno (menší a přes ten canvas), které si převezme focus (modrá horní lišta okna) a klikneme na spodní menu (které v tu chvíli focus nemá) tak dojde k zamrznutí.
Predpokladam, ze na ten Canvas kreslite v kontextu zpravy WM_PAINT tj. bud v prekryte metode Paint nebo v udalosti OnPaint...

Vztah toho, cos popsal, je k pumpe zprav jaky?
 - kresleni na Canvas
 - aktivity nove otevreneho okna

Vyse jsi psal, ze jste vyhazeli vsechna volani ProcessMessages. Nezamrzne to proste proto, ze se vlivem nejakeho nestastneho navrhu prestanou distribuovat zpravy
(jako akt zoufalosti muzes porovnat zdrojovky pred vyhazenim ProcessMessages s aktualnim stavem a eventualne tam nektere docasne vratit, abys mohl chybu lokalizovat.
Protoze se vsechno v GUI odehrava pres zpravy, mozna by ti mohl ukazat neco WinSight (tusim v D6 by jeste mel byt, nebo pouzit MS spyxx*.exe)

Osobne bych se prilis nesoustredil na to, ze to pod XP fungovalo a na W7 to nefunguje. Ty XP bezely pravdepodobne na nejakem jinem HW, takze byla jina dynamika a pokud jste vyrobily race condition chybu, tak proste jednoduse vyplula.


Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #21 kdy: 23-06-2015, 11:23:00 »
ještě ke vzdálenému debuggingu: možná bys měl IDE spouštět jako správce. Nainstaluj si 32-bitové aplikace a jejich části (dll, bpl) do adresářů kam patří, použij vhodný režim kompatibility.
Pokud ti to nepojede s 32-bitovými Windows 7 ani s režimem kompatibility, ale aplikace na starších OS funguje, je zřejmě nutné aplikaci upravit a zkompilovat v novějších Delphi. Pokud ti to s 32-bitovými Windows 7 pojede, ale se 64-bitovými ne, buď při instalaci aplikace na 64-bitový OS děláš něco špatně nebo je nutné aplikaci upravit a zkompilovat v novějších Delphi nejlépe se 64-bitovým překladačem.
Ještě si vzpomínám na jednu "kličku" co jsme tu kdysi zkoušeli: nainstalovat virtuální stroj s Windows XP a takovou aplikaci spouštět na něm. Ne vždy byly výsledky uspokojivé. Po upgrade na XE5 kde 64-bitový překladač je jsem tyto problémy a kličky přestal řešit.

hu


Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #22 kdy: 23-06-2015, 11:47:07 »
Aplikaci jsme zkoušeli na stejném HW s Win XP i Win 7. Možná jsme ale na něco přišli:

Kreslení na canvas v menu máme na proceduru KRESLI. Tu voláme když potřebujeme a zároveň se volá i v OnPaint eventu - aby se pošetřilo překreslení pokud se objeví přes kreslící plochu nějaké menu či jiný objekt. Je možné, že docházelo ke spuštění procedury KRESLI a zároveň vznikl požadavek OnPaint. Když si k tomu přidám ProcessMessages/HandleMessage, tak to mohlo způsobit totální zamrznutí aplikace.

Momentálně testujeme upravenou verzi a zatím se nám chybu nepovedlo nasimulovat (což byla předtím vždy otázka několika minut).

Uvidíme ...   

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 123
  • Karma: 8
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #23 kdy: 23-06-2015, 12:24:58 »
To skor vypadá na zacyklení kde processmessages - zavolá zpracování fornty a  to zavolá vykreslení - které zavolá processmessages a tak stále dokola.

Online pf1957

  • Padawan
  • ******
  • Příspěvků: 2165
  • Karma: 116
    • Verze Delphi: D2007, XE3, DX10
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #24 kdy: 23-06-2015, 12:29:23 »
To skor vypadá na zacyklení kde processmessages - zavolá zpracování fornty a  to zavolá vykreslení - které zavolá processmessages a tak stále dokola.
Pri takove rekurzi by mu pretekl zasobnik, ne?

Online pf1957

  • Padawan
  • ******
  • Příspěvků: 2165
  • Karma: 116
    • Verze Delphi: D2007, XE3, DX10
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #25 kdy: 23-06-2015, 12:39:15 »
To skor vypadá na zacyklení kde processmessages - zavolá zpracování fornty a  to zavolá vykreslení - které zavolá processmessages a tak stále dokola.
Nehlede na to, ze psal, ze ProcessMessages vsude odstranili...

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #26 kdy: 23-06-2015, 12:56:10 »
ProcessMessages jsme všude vyhodili, ale museli jsme nechat HandleMessage, které vždy utneme při dosažení určitého času (vstupní parametr procedury). Možná se prostě sejdnou ve frontě dva stejné požadavky na kreslení a ty se zacyklí. Stává se to velmi zřídka.

Online pf1957

  • Padawan
  • ******
  • Příspěvků: 2165
  • Karma: 116
    • Verze Delphi: D2007, XE3, DX10
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #27 kdy: 23-06-2015, 13:44:17 »
ProcessMessages jsme všude vyhodili, ale museli jsme nechat HandleMessage,
Jestli obslouzite vsechny pending message nebo jen jednu, ono to vyjde z pohledu mozne rekurze skoro nastejno, akorat pravdepodobnost vyskytu bude nizsi :-)
Oboje to patri mezi zahrzenihodne techniky.

Citace
které vždy utneme při dosažení určitého času (vstupní parametr procedury). Možná se prostě sejdnou ve frontě dva stejné požadavky na kreslení a ty se zacyklí. Stává se to velmi zřídka.
To znamena co: "utneme"? Vy v obsluze vybranych zprav tj. eventech udelate predcasny exit?

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #28 kdy: 23-06-2015, 14:03:11 »
Vím, že spoustu lidí nedoporučuje ProcessMessages a HandleMessage. Občas to ale nejde jinak.

HandleMessage obslouží jednu message událost. Pokud tedy chceme z nějakého důvodu chvilku počkat (třeba 500ms), tak spustíme Timer a po požadovanou dobu voláme HandleMessage. Vždy ji necháme doběhnout a pak akorát vyskočíme z cyklu.

 

Online pf1957

  • Padawan
  • ******
  • Příspěvků: 2165
  • Karma: 116
    • Verze Delphi: D2007, XE3, DX10
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #29 kdy: 23-06-2015, 14:14:42 »
Vím, že spoustu lidí nedoporučuje ProcessMessages a HandleMessage. Občas to ale nejde jinak.
Samozrejme, ze to jde bez toho, jen se ta aplikace musi naprogramovat a ne naklikat...

Ja za svou praxi videl jediny pripad, kdybych nad tim zamhouril oko a to kvuli nejakym komponentam 3. strany, ktere se bez toho nechteli zinicializovat. Uz ani nevim, co to bylo zac a ani jsem to neprogramoval.

Online pf1957

  • Padawan
  • ******
  • Příspěvků: 2165
  • Karma: 116
    • Verze Delphi: D2007, XE3, DX10
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #30 kdy: 23-06-2015, 14:18:56 »
HandleMessage obslouží jednu message událost. Pokud tedy chceme z nějakého důvodu chvilku počkat (třeba 500ms), tak spustíme Timer a po požadovanou dobu voláme HandleMessage. Vždy ji necháme doběhnout a pak akorát vyskočíme z cyklu.
Hmmm, cekani v event driven prostredi :-O

To se snad dela tak, ze vygeneruju po yplynuti 500 ms event a tu si obslouzim a mezitim necham, at si main thread obsluhuje, co potrebuje tj. neduplikuju pumpu zprav a cekam pomoci nejakeho timeru, ktery je vybaven generovan vhodne udalosti...

Offline našinec

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 5
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #31 kdy: 23-06-2015, 14:36:38 »
pf1957: Zrovna nedávno jsem četl starší články z doby D6 a v nich se doporučovalo používání ProcessMesaages před thready(mám tím na mysli upřednostňování).Pokud ten program pochází z té doby, tak zde je možná vysvětlení.

Online pf1957

  • Padawan
  • ******
  • Příspěvků: 2165
  • Karma: 116
    • Verze Delphi: D2007, XE3, DX10
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #32 kdy: 23-06-2015, 14:40:25 »
pf1957: Zrovna nedávno jsem četl starší články z doby D6 a v nich se doporučovalo používání ProcessMesaages před thready(mám tím na mysli upřednostňování).Pokud ten program pochází z té doby, tak zde je možná vysvětlení.
A mas na neco takoveho odkaz ev. zdroj, protoze by me docela zajimalo, kdo takovy blabol mohl vypustit do sveta...

To mohlo max. platit v 16bitovem Delphi 1 na Win 3.x, ktery thready nemel...
« Poslední změna: 23-06-2015, 14:42:51 od pf1957 »

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #33 kdy: 23-06-2015, 14:54:52 »

Citace
Zrovna nedávno jsem četl starší články z doby D6 a v nich se doporučovalo používání ProcessMesaages před thready
Začínal jsem asi před 10 lety. Už tehdy do mne kamoš hučel "použij thread". O ProcessMessages mi neřekl ani slovo. Pár pokusů o čekání v hlavním vlákně jsem taky udělal (se není čím chlubit). Byly spolehlivý = mohl jsem se spolehnout, že to často zhavaruje. :D

hu

Offline našinec

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 5
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #34 kdy: 23-06-2015, 15:11:41 »
Abych nebrečel hezky, ale na špatném místě, tak jsem to zkusil najít.Sami víte, že každý z nás chápe jakoukoliv informaci malinko jinak.Ale pokud si např. někdo přečetl tehdy na živě.cz od p. Kadlece o potřebě používání ProcessMessage a určité varování před užíváním či nadužíváním threadů, tak si to mohl vyložit, jak jsem výše popsal.

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #35 kdy: 24-06-2015, 06:46:15 »
Také jsem nikdy ProcessMessages nepoužíval, ale dostal jsem se k "hotovému" a nedá se s tím už moc dělat. Jinak chyba se nám už nevyskytla - budeme ale pokračovat v dalším testování. W7 prý myjí jinak řešenou akceleraci kreslení na canvas. Je tedy možné, že jsou oproti Win XP i další změny, které způsobí ono problematické zamrznutí.
« Poslední změna: 24-06-2015, 07:08:39 od age.new »

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #36 kdy: 24-06-2015, 07:08:20 »
Mohl bych se ještě zepatat .. máte někdo zkušnost s ukončováním D6 aplikací na Win 7? Po události Form.Close na hlavním formu občas aplikace zahlásí, že se čeká na ukončení programu, avšak občas zůstane process v task manageru a musí se ručně zrušit. Nahradili jsme proto Close příkazem Terminate. To vyřešilo process v task manageru, ale občas se stále objevuje čekání na ukončení programu. Opět - ve Windows XP to funguje bez problémů. Napadá někoho nějaká rada?

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #37 kdy: 24-06-2015, 09:35:21 »
Tak postupným testování ukončování aplikace dopadá nejlépe TerminateProcess(GetCurrentProcess, 0);

Offline KarelHorky

  • Plnoletý
  • ***
  • Příspěvků: 171
  • Karma: 7
    • Verze Delphi: 7, XE6
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #38 kdy: 24-06-2015, 11:36:47 »
máte někdo zkušnost s ukončováním D6 aplikací na Win 7?
Aplikace v Delphi 7 při napojení na databázi Firebird Embedded určité verze (2.0) se přestala ukončovat, ale zaprvé to byl problém Firebirdu (verze 1.5 a 2.5 nemá problém) a zadruhé ty Firebird nepoužíváš. Jinak nikdy žádné problémy s ukončením aplikace nemáme, a našich několik aplikací se používá na XP, Vistách, 7, 8, 8.1, 32 i 64 bit. Teď jsme to otestovali i na Windows 10, bez problémů.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3405
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #39 kdy: 24-06-2015, 12:30:09 »
Mňa ako laika pri #37 napadlo, že tam musí byť neukončené vlákno.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #40 kdy: 24-06-2015, 12:37:13 »
Aplikace je to obsáhlá. Zkoušíme vše poctivě uvolňovat a FastMM debug vypíše pouze nějaké statické struktury. 

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1326
  • Karma: 30
    • Pepak.net
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #41 kdy: 25-06-2015, 07:08:35 »
Máme D6 instalováno mimo program files. To proč nevidí bpl soubory které mají správně nastavenou cestu a fyzicky tam skutečně jsou - to mi hlava nebere.
Protože User Account Control a s tím spojená virtualizace některých částí filesystému, zejména obsahu Program Files.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2013
  • Karma: 89
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #42 kdy: 25-06-2015, 08:57:24 »
Máme D6 instalováno mimo program files. To proč nevidí bpl soubory které mají správně nastavenou cestu a fyzicky tam skutečně jsou - to mi hlava nebere. 

Mas cestu k BPL v promennych prostredi PATH? Ale pozor - pokud je cesta v PATH delsi nez limit 2048, tak i kdyz je tam cesta uvedena, Windows ji ignorují nebo zkracují.
Např. https://www.devexpress.com/Support/Center/Question/Details/B139550

Novější verze (tak asi XE3 +) zobrazují warning při problémech s cestou.
Hodně programů, včetně každé verze Delphi tam cpou svoje cesty.
Embarcadero MVP - Czech republic

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #43 kdy: 25-06-2015, 09:31:18 »
U D6 se nastavuje přímo BPL cesta, která byla správná i soubory se v cílovém umístění fyzicky nacházeli. Ale to už je momentálně jedno. Chyba se již neprojevuje tři dny po sobě, takže jsme snahu oživení D6 na pracovním stroji zrušili.


Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 123
  • Karma: 8
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #44 kdy: 26-06-2015, 11:10:27 »
A co to přeložit třeba v D7 a zkusit jestli se to bude chovat jinak, nebo v XE*. Jestli tam bude rozdíl, může to být ve VCL.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3405
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #45 kdy: 26-06-2015, 11:19:52 »
Citace
Mas cestu k BPL v promennych prostredi PATH?
Citace
U D6 se nastavuje přímo BPL cesta, která byla správná
Urob ako Ti radí Radek. Nastav ju na oboch miestach. Tiež som tak musel urobiť. Asi pri vlastných komponentoch.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 115
  • Karma: 0
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #46 kdy: 29-06-2015, 07:16:24 »
Tak po víkendovém testování se chyba opět projevila. Bohužel s aplikací se nemusí pracovat, zamrznutí je zcela náhodné a nemusí předcházet akci uživatele.

Sám nevím. Windows XP za x let bez problému, ale Win 7 se seká min. 1 každý den.

V průběhu práce si vedeme log do souboru a když nastane zamrznutí, tak se ani nedopíše věta.

Online pf1957

  • Padawan
  • ******
  • Příspěvků: 2165
  • Karma: 116
    • Verze Delphi: D2007, XE3, DX10
Re:Aplikace z D6 občas zamrzne a hlásí "not responding"
« Odpověď #47 kdy: 29-06-2015, 07:57:01 »
Tak po víkendovém testování se chyba opět projevila. Bohužel s aplikací se nemusí pracovat, zamrznutí je zcela náhodné a nemusí předcházet akci uživatele.
Klasicke projevy race condition. Pouzivate Paradox, tam jsou souborove zamky - mate pristup k DB nejak korektne sdileny? Kdyz mate CPU na 0 %, tak by se mohlo indikovat deadlock.

Citace
V průběhu práce si vedeme log do souboru a když nastane zamrznutí, tak se ani nedopíše věta.
Pokud nepouzivate specialni zpusob prace se souborem pri logovani, tak je to prirozene chovani: OS fyzicky zapisuje do souboru, az kdyz zaplni buffer.
Pokud to tak nedelate, chce to otevirat soubor pro logovani pomozi API CreateFile s flagy FILE_FLAG_NO_BUFFERING a FILE_FLAG_WRITE_THROUGH.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: