Delphi - výstup programu v debug móde
Ako si počas debugovania zobraziť aktuálny vzhľad práve debugovaného formulára? Je to vôbec možné? Mám na mysli obdobu Alt+F5 v Turbo Pascale.
Ako si počas debugovania zobraziť aktuálny vzhľad práve debugovaného formulára? Je to vôbec možné? Mám na mysli obdobu Alt+F5 v Turbo Pascale.
Zpět do poradny Odpovědět na původní otázku Nahoru
Pokud program krokujes, tak hlavni thread stoji a ceka na to, az stisknes F7, F8, F9
A protoze nedochazi ke zpracovani zprav, nedochazi ani k prekreslovani formulare
A neexistuje nejaký "plugin", čo by správy vysielal? Či ono ide o to, že keď sa na formulári niečo zmení, tak sa môže vyvolať nová správa a ja by som sa uF7čkoval k smrti?
Spravy vysiela windows, problem je ze ich tvoj program nemoze spracovat kedze si ho zastavil, tak predsa tvoj program nemoze vykreslit obsah okna ked je zastaveny.
Celkom tomu nerozumiem. Viem, že správu spracovať nemôže, ale debugger by mohol zistiť, že aha, tu treba vytvoriť správu, lebo sme zmenili label a mohol by to odsimulovať. Myslím tak odsimulovať, že vytvorí správu a Windows by ju spracoval. Potom by to debugger vyhodnotil a ak bude treba, tak sa zastaví na pred vykonaním ďalšieho riadku programu. Dalo by sa to teda bližšie osvetliť? Lebo síce chápem, že to nepôjde, ale nechápem prečo je to tak ako to je. Trochu hlbšie to vysvetliť. Tiež si myslím, že nie som sám koho to zaujíma.
Evidentne nechapes ze spravy "vytvara" (posiela) Windows (napr. ak treba prekreslit okno tak Windows posle tvojmu programu WM_PAINT), a spracovat ju musi tvoj program (v pripade WM_PAINT vykreslit obsah okna), nie naopak. Ak tvoj program stoji tak predsa nemoze vykreslit obsah okna, pretoze ani nemoze prevziat zo svojej fronty sprav to WM_PAINT ktore mu Windows poslali, lebo si ho proste zastavil a teda nebezi ani message-loop tvojho programu.
Trochu by si sa mal viac zamerat na debugovanie toho co je naozaj nutne, snad vidis co mas v premennych nepotrebujes predsa pri debugovani vidiet obsah okna (v najhorsom pripade sa da zavesit breakpoint na WM_PAINT, ale ak to je v kniznici delphi tak by si sa musel asi najprv naucit assembler).
P.S. Ak chces vidiet vystup tak program pust a nastav si breakpoint len na nejaku akciu, tam kde treba. Nechapem co robis vzivote som pri debugovani nepotreboval vidiet obsah okna programu.
Tak už tomu začínam rozumieť. Mne ani tak nejde o obsah toho okna ako o vysvetlenie, prečo je to tak. No vyzerá to tak, že začínam rozumieť.
Snazil som sa to napisat zjednodusene, v skutocnosti je to trochu komplikovanejsie (spravy su urcene vzdy niektoremu oknu, okien moze byt viac, slucka sprav byva len jedna ale tiez ich moze byt v programe viac ). A navyse ak by si mal v programe vytvaranie extra threadu (napr. worker thread alebo thread s vlastnym oknom a sluckou sprav) tak pri zastaveni toho threadu tvoj program moze stale bezat a teda aj vykreslovat obsah okna , ale na to radsej teraz zabudni.
Az budes mat problem ze tvoj program pri nejakej dlhsej vypoctovej operacii nereaguje a neprekresluje okno a az skonci ta dlhsia vypoctova operacia tak zrazu vykona vsetko co nervozny pouzivatel pocas vypoctu naklikal po celom okne Potom si spomen na vyraz "worker thread".
NO čo sa vláken týka, tak viem, že (ešte som s vláknami v programe nerobil) treba vyvolať obsluhu správ, inak sa zrúti program (teda spracovanie správ sa zastaví a program prestane reagovať). To znie dosť nebezpečne.
? Netreba nic vyvolavat, treba vediet co clovek robi (resp. vediet co Windows robi ). Citania je o tom dost, v helpe k delphi o tom bude urcite dost (multithreading).