

Môžem opraviť chybu spôsobenú v module ntdll? Delphi 6
Priatelia, vytvoril som aplikáciu, ktorá pracuje s internými dátami, triedi ich a zobrazuje, určité informácie podáva aj zvukom. Teda nepoužíva žiadne zložité systémové funkcie, jedine knižnicu fmod na prehrávanie súborov. Ozvali sa mi dvaja užívatelia, že im počas práce programu vybehne hláška o chybe v ntdll.dll + dlhé čísla acces violation on adres xxxx in module ntdll.dll read od address 0000000. Zhodou okolností obaja užívatelia majú Win 7 32 bit. Chcem sa spýtať, či ja ako vývojár mám šancu nájsť a opraviť príčinu, ak na iných systémoch program šlape dobre vrátane starého XP a systémov 64 bit alebo musí problém riešiť užívatel na svojom systéme? Ja tu Win 7 32 bit vôbec nemám tak len aby som vedel či má zmysel zháňať ho, testovať a trápiť sa s ladením. Vďaka
Pokud chces zjistit neco blizsiho od uzivatelu, pak doporucuji knihovnu JCL e exception dialog. Je to nejjednodussi cesta, jak pridat do programu logovani chyb s moznosti odeslani a vypisem zasobniku, co se delo.
Informaci najdes primo v exception dialogu.
Ahoj tak som si stiahol JCL kedze mam Delphi 6 tak radsej starsiu verziu 1.97 spustil installl.bat ale nejak z toho nie som mudry. v jcl options mozem iba priradit klavesovu skratku trom akciam jcl options insert jcl debug informations a podobne - vsetko veci co mozem aj z menu Delphi, a potom uz len astavit cestu k ini suboru. Viac mi to nic neponuka. V debug options je nastavena cesta k jcl kniznici ale zatial sa vsetko javi ako predtym ak si vytvorim program s umelou chybou tak vybehne klasický acces violation a ani kurzor mi neskoci na riadok s chybou. Tak mozes nakopnut ako urobit aby jcl spravil vypis chyby a ako tento potom vyuzit? Vdaka
Neni treba nic instalovat. O exception dialogu je napsano zde:
\jcl\docs\Experts.html
V teto slozce pak mas predprivane dialogy:
\jcl\experts\repository\ExceptionDialog\StandardDi alogs
Dialog musis pridat do Uses nejlepe nekde na zacatku v DPR.
Pak musis podle pokynu nastavit compiler, aby generoval MAP soubor - to je soubor s debug informacemi.
Nasledne mas 3 moznosti:
1. budes MAP soubor distribuovat se svou aplikaci jako samostatny soubor
2. pomoci nastroje, dodavaneho jako soucast JCL si MAP soubor pridas jako resource do EXE
3. nainstalujes si do delphi wizarda, ktery to zautomatizuje a po kazde kompilaci ti tam MAP soubor automaticky prida
Slozka \jcl\experts\debug, doporucuji (opet) precist \jcl\experts\debug\Howto.txt
Výsledkem je pak neco takoveho (uvadim kousek):
Takze z toho vidim (cti shora), ze posledni, co bylo byl dblclick ve formulari TfAbout na Image 1 na radku 188 v unite uAbout. V novem PSPadu si to muzes vyzkouset, jak to vypada, staci dvojklik na psovi v okne o programu - je to testovaci vyjimka
Dobrý deň, po čase by som sa ešte raz na chvíľu rád vrátil k uvedenej téme. JCL používam a ozaj vďaka za tip naň, veľmi efektívne mi pomáha najsť bugy. Chcel by som sa ale ešte opýtať, čo znamená, ak sa mi v logu objaví JclSynch.TJclCriticalSection.Leave. Díval som sa samozrejme do helpu ale nejak som z toho neporozumel čo táto hláška avizuje vo vzťahu k môjmu programu. Dik
Takto obecne se neda odpovedet. Critical section je neco jako blok operaci, ktere musi byt dokonceny najednou. Pouziva se pri praci s vlakny, kdyz potrebujes neco udelat vyhradne - napr. pozastavit cisnnost ostatnich vlaken nez se to dokonci.
Spis se zamer na to, co je okolo tohoto radku.
Áno to o criticalsection vo vláknach viem ale mna prave prekvapilo to JclSynch.TJclCriticalSection teda chapal som to tak ze nejde o criticalsection mojho programu a jeho vlakna ale o criticalsection samotneho jcl a prave tomu som nerozumel ci ma problem moj program alebo samotne jcl.
Ve výpise máš přímo unitu a řádek. Máš zdrojové kódy, tak se koukni, k čemu to sloučí.
Dobrý deň, aktualizoval som Delphi na XE8 a inštalácia JCL prebehla v poriadku, takže môžem kompilovať aj staré projekty, ktoré obsahujú jcl dialógy. Ak ale skúsim urobiť kompiláciu pre 64 bit Windows, objaví sa táto chyba:
Bad unit format: 'ExceptDlg.dcu' - Expected version: 29.0, Windows Unicode(x64) Found version: 29.0, Windows
Unicode(x86)
Čo s tým? Súbory exceptdlgxxx mám priamo v zložke s projektom - sú to tie z jcl-2.7.0.5676/experts/repository/ExceptionDialog/ StandardDialogs a iné teda unicode 64 som nenašiel. Vďaka.
A mas tam i zdroje, nejen DCU?
Ta hlaska znamena, ze mas DCU, zkompilovane pro 32b a ty potrebujes DCU pro 64b.
Delphi to standardne kompiluje do odlisnych adresaru
Ano, Ak založím nový projekt tak áno, vtedy mi kompiluje každú platformu inde a vytvorí si pekne zložky pre Win 32 a Win64. Ale pri starších projektoch to nerobí a nejak som zatiaľ neprišiel na to, ako ho k tomu prinútiť. 32 bit mi skompiloval priamo do zložky s projektom a myslím že s kompiláciou do 64 bit to urobí tiež, ak kompilácia prebehne.
Pak zkus dat build
Dobrý deň ešte hádam naposledy k tejto téme. Ako mám dostať jcl do Delphi 10.1 Berlin? Na nete čítam, že ľudia s tým majú problémy a riešia rôzne chybové hlášky pri inštalácii, ale mne žiadna chyba nevybehne akurát že inštalátor nedetekuje verziu Delphi a nič nenainštaluje. Pokúšal som sa skompilovať balíčky zo zložky d23 v packages ale kompilácia vždy skončí na nejakom riadku v zdroji. Existuje možnosť ako dostať jcl do týchto Delphi a kompilovať tak staršie projekty, ktoré jcl obsahujú? Š
JCL neni treba instalovat. Staci do USES pridat odkaz na dialog, ktery jsi mel vytvoreny a pouzival v nejakem jinem projektu
Ahoj no v uses môjho projektu mám exceptdlg ale práve s tým má kompilátor problém, pretože keď ho začne kompilovať tak píše že nevie nájsť JclSysUtils a JclUnitVersioning a ďalšie unity, ktoré má zasa v uses ten exceptdlg takže evidentne by som minimálne mal kompilátoru nastaviť cestu do jcl/source/common kde všetky tieto unity sú ale neviem kde to v D 10.1 urobiť. :(
Samozrejme musis postupovat jako pri jinych knihovnach - pridat cestu ke zdrojum do Libary path