Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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

Předmět Autor Datum
To, že to spadlo v ntdll, neznamená, že chyba je v ntdll. Bude to pravdepodobne spôsobené napr. vola…
los 14.05.2016 16:24
los
Pokiaľ Ti užívatelia nedajú presné info, kedy a pri akej činnosti sa to deje - bude asi problém, zis…
pme 14.05.2016 16:55
pme
Pokud chces zjistit neco blizsiho od uzivatelu, pak doporucuji knihovnu JCL e exception dialog. Je t…
Jan Fiala 14.05.2016 17:34
Jan Fiala
Ahoj tak som si stiahol JCL kedze mam Delphi 6 tak radsej starsiu verziu 1.97 spustil installl.bat a…
Stefan77 14.05.2016 19:31
Stefan77
Ak už chceš niečo softwarovo zisťovať, potom sa môžeš pozrieť na madExcept.htm - je to pre nekomerčn…
pme 14.05.2016 19:56
pme
Neni treba nic instalovat. O exception dialogu je napsano zde: \jcl\docs\Experts.html V teto slozce…
Jan Fiala 15.05.2016 11:55
Jan Fiala
Výsledkem je pak neco takoveho (uvadim kousek): Exception class: EMathError Exception address: 0063…
Jan Fiala 15.05.2016 11:58
Jan Fiala
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ďak…
Stefan77 31.08.2016 06:09
Stefan77
Takto obecne se neda odpovedet. Critical section je neco jako blok operaci, ktere musi byt dokonceny…
Jan Fiala 31.08.2016 08:48
Jan Fiala
Áno to o criticalsection vo vláknach viem ale mna prave prekvapilo to JclSynch.TJclCriticalSection t…
Stefan77 31.08.2016 13:29
Stefan77
Ve výpise máš přímo unitu a řádek. Máš zdrojové kódy, tak se koukni, k čemu to sloučí.
Jan Fiala 31.08.2016 13:32
Jan Fiala
Dobrý deň, aktualizoval som Delphi na XE8 a inštalácia JCL prebehla v poriadku, takže môžem kompilov…
Stefan77 20.09.2016 02:04
Stefan77
A mas tam i zdroje, nejen DCU? Ta hlaska znamena, ze mas DCU, zkompilovane pro 32b a ty potrebujes D…
Jan Fiala 20.09.2016 07:02
Jan Fiala
Ano, Ak založím nový projekt tak áno, vtedy mi kompiluje každú platformu inde a vytvorí si pekne zlo…
Stefan77 20.09.2016 10:01
Stefan77
Pak zkus dat build
Jan Fiala 20.09.2016 12:12
Jan Fiala
Dobrý deň ešte hádam naposledy k tejto téme. Ako mám dostať jcl do Delphi 10.1 Berlin? Na nete čítam…
Stefan77 29.09.2016 14:28
Stefan77
JCL neni treba instalovat. Staci do USES pridat odkaz na dialog, ktery jsi mel vytvoreny a pouzival…
Jan Fiala 30.09.2016 06:06
Jan Fiala
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…
Stefan77 30.09.2016 07:48
Stefan77
Samozrejme musis postupovat jako pri jinych knihovnach - pridat cestu ke zdrojum do Libary path poslední
Jan Fiala 30.09.2016 09:54
Jan Fiala

To, že to spadlo v ntdll, neznamená, že chyba je v ntdll. Bude to pravdepodobne spôsobené napr. volaním funkcie systému s nesprávnym parametrom a pod.

K nájdeniu príčiny potrebuješ súbor s výpisom pamäte procesu (.dmp súbor) v čase, keď zlyhá. Ten sa dá vytvoriť buď v správcovi úloh alebo je možné nastaviť v registroch, aby sa vytváral automaticky pri každom páde.

V dump-e budeš vidieť stack trace. Na to, aby si vedel z neho určiť, na ktorom riadku to spadlo, budeš potrebovať ešte súbor so symbolmi pre ladenie. Keďže je to Delphi, tak tam budeš musieť ešte prehnať ten ich MAP súbor, aby si získal klasický PDB formát.

Či má zmysel sa s tým trápiť, je tvoje rozhodnutie. My čo sme mali Delphi aplikáciu (tiež fungovala všade od XP okrem pár vyvolených PC), tak sme ju občas chodili ladiť aj ku klientom a vždy to bol boj. Väčšinou šlo o počítače v takom rozhasenom stave, kde nešiel nainštalovať ani .NET Framework.

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):

Exception class: EMathError
Exception address: 0063A7CA
----------------------------------------------------------------------------------------------------
Stack list, generated 15.05.2016 11:53:42
[0063A7C5] uAbout.TfAbout.Image1DblClick (Line 188, "uAbout.pas" + 0) + $11
[004A0E41] Controls.TControl.DblClick (Line 4710, "Controls.pas" + 1) + $14
[004A0FA4] Controls.TControl.WMLButtonDblClk (Line 4751, "Controls.pas" + 4) + $C
[004A0C8C] Controls.TControl.WndProc (Line 4645, "Controls.pas" + 53) + $6
[00515D8B] SynEdit.GetMsgProc (Line 11380, "SynEdit.pas" + 27) + $C
[004A0A5C] Controls.TControl.Perform (Line 4552, "Controls.pas" + 5) + $C
[004A3A4C] Controls.GetControlAtPos (Line 6258, "Controls.pas" + 4) + $61
[004A3AE4] Controls.TWinControl.ControlAtPos (Line 6277, "Controls.pas" + 10) + $E
[004A0A5C] Controls.TControl.Perform (Line 4552, "Controls.pas" + 5) + $C
[004A3B82] Controls.TWinControl.IsControlMouseMsg (Line 6301, "Controls.pas" + 15) + $F
[004A3C6E] Controls.TWinControl.WndProc (Line 6327, "Controls.pas" + 18) + $4
[00489C11] Forms.TCustomForm.WndProc + $421

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

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.

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.

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ú? Š

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ť. :(

Zpět do poradny Odpovědět na původní otázku Nahoru