|
Registriert seit: 3. Sep 2004 441 Beiträge Delphi 10.4 Sydney |
#1
Delphi-Version: 2007
Hallo mal wieder.
Ich bin mit meinem Latei mal wieder komplett am Ende, und selbst die SuFu oder Google liefern mir hier noch nicht mal mehr Ansätze. Ich habe hier (m)ein Programm, das aus einer Datenbank über einen Thread Werte lädt, diese mittels Synchronize() an eine Komponente aus dem Hauptformular übergibt und dann weiterverarbeitet wird. Das klappt alles 100% zuverlässig und störungsfrei. Nun ergibt sich aber das Problem, dass, sobald ich/der Benutzer etwas in ein TEdit oder TMemo eingibt, und (nach wilden rumtippseln auf der Tastatur) dann Leertaste drücke, eine Exception kommt. Alle TEdit/TMemo Objekte haben kein On-Ereignis hinterlegt. Alle Formulare haben KeyPreview auf "False". Es scheint so, als ob beim Drücken der Leertaste Delphi/Windows intern "Application.ProcessMessages" aufruft (siehe Stack weiter unten) und dann irgendwas im Hintergrund schafft. Ich vermute ja fast, dass Delphi alle Nachfahren von TObject, die momentan als Variable in meinem Programm/Speicher vorhanden sind benachrichtigt, dass der Hotkey "Leertaste" gedrückt wurde. Interessiert zwar keine einzige Komponente, aber egal. Während die Liste (wo nimmt er die her?) mit allen Komponenten durchgeht, wird wohl eine Komponente aus der Liste gelöscht, und es kommt zu der Exception. Meine Vermutung. Der Thread löscht keine Komponenten aus dem Hauptprogramm. Beim Debuggen wird mir beim Anklicken aller Threads nacheinander bei "Thread-Status" auch kein Thread angezeigt, in dem aktuell mein Quelltext läuft oder sonst irgendwie etwas gelöscht wird (es gibt ja immer mehrere "leere" Threads beim Debuggen wo nur "WaitForSingleObject" o.ä. als einziger Stackbefehl zu sehen ist). Der VCL/Main Thread ist idle und durchläuft zu diesem Zeitpunkt keine Prozeduren von mir. Ich verwende außer meinen Objekten und den Standard-Komponenten nur ein paar LMD-Panels etc., aber die werden nur bei Programmstart erzeugt. Keine weiteren Threads oder Fremdkomponenten. Wie bekomme ich denn raus, bei welcher TList der .Get-Befehl fehlgeschlagen ist? Was kann man machen? Kann ich der TApplication die Reaktionen auf Tastatur-Anschläge verbieten (MessageHandler überschreiben, ...)? Anbei das Log:
Code:
EurekaLog 7.0.6.0
Exception: ------------------------------------------------------------- 2.2 Address: 00436D20 2.5 Type : EListError 2.6 Message: Listenindex überschreitet das Maximum (21116). 2.7 ID : 60500000 2.11 Sent : 0 User: ----------------- 3.2 Name : name 3.3 Email: Steps to reproduce: ------------ 8.1 Text: Call Stack Information: ------------------------------------------------------------------------------------------------------------------------------------------------- |Methods |Details|Stack |Address |Module |Offset |Unit |Class |Procedure/Method |Line | ------------------------------------------------------------------------------------------------------------------------------------------------- |*Exception Thread: ID=4024; Parent=0; Priority=0 | |Class=; Name=MAIN | |DeadLock=0; Wait Chain= | |Comment= | |-----------------------------------------------------------------------------------------------------------------------------------------------| |7FFFFFFE|04 |00000000|00436D20|pCRM7.exe |00036D20|Classes |TList |Get |2992[2] | |00000020|04 |0018FBA8|00440ABB|pCRM7.exe |00040ABB|Classes |TComponent |GetComponent |10673[2] | |00000020|04 |0018FBB4|005034BF|pCRM7.exe |001034BF|Forms | |DispatchShortCut |5997[5] | |00000020|04 |0018FBD0|0050356D|pCRM7.exe |0010356D|Forms |TCustomForm |IsShortCut |6018[3] | |00000020|03 |0018FEB8|75BE6175|USER32.dll |00026175|USER32 | |SendMessageA | | |00000020|04 |0018FEDC|005067EB|pCRM7.exe |001067EB|Forms |TApplication |IsKeyMsg |8022[24] | |00000020|04 |0018FF08|00506A49|pCRM7.exe |00106A49|Forms |TApplication |ProcessMessage |8097[15] | |00000020|04 |0018FF20|00506AAE|pCRM7.exe |00106AAE|Forms |TApplication |HandleMessage |8124[1] | |00000020|04 |0018FF44|00506DA3|pCRM7.exe |00106DA3|Forms |TApplication |Run |8223[20] | |00000020|04 |0018FF74|006B05B5|pCRM7.exe |002B05B5|pCRM7 | |Initialization |39[8] | |00000020|03 |0018FFD8|77BD9F40|ntdll.dll |00039F40|ntdll | |(possible RtlInitializeExceptionChain+49)| | |-----------------------------------------------------------------------------------------------------------------------------------------------| | | |Running Thread: ID=5216; Parent=4024; Priority=0 | |Class=TLoadSaveThread; Name= (uLoadSave.TLoadSaveThread.Execute) | |DeadLock=0; Wait Chain=thread: [ 1460 / 5216 ] is blocked | |Comment= | |-----------------------------------------------------------------------------------------------------------------------------------------------| |7FFFFFFE|03 |00000000|77BBF8D1|ntdll.dll |0001F8D1|ntdll | |ZwWaitForSingleObject | | |00000020|03 |03F3F984|766F118F|kernel32.dll|0001118F|kernel32 | |WaitForSingleObjectEx | | |00000020|03 |03F3F99C|766F1143|kernel32.dll|00011143|kernel32 | |WaitForSingleObject | | |00000020|04 |03F3F9B0|0044028F|pCRM7.exe |0004028F|Classes |TThread |Synchronize |10168[34] | |00000020|04 |03F3FA00|00440336|pCRM7.exe |00040336|Classes |TThread |Synchronize |10196[4] | |00000020|04 |03F3FA08|006942DE|pCRM7.exe |002942DE|uLoadSave |TLoadSaveThread|Execute |1157[644] | |00000020|04 |03F3FE64|004DE045|pCRM7.exe |000DE045|EAppMultiThreaded| |ThreadExecuteSafeWrapper |64[11] | |00000020|04 |03F3FEA8|0043FE10|pCRM7.exe |0003FE10|Classes | |ThreadProc |9877[7] | |00000020|04 |03F3FED8|00405334|pCRM7.exe |00005334|System | |ThreadWrapper |12110[33] | |00000020|04 |03F3FEEC|004DE21E|pCRM7.exe |000DE21E|EAppMultiThreaded| |ThreadProcHandler |137[13] | |00000020|04 |03F3FF34|004C2607|pCRM7.exe |000C2607|EExceptionManager| |DefaultThreadHandleException |2850[3] | |00000020|04 |03F3FF78|0049D8C3|pCRM7.exe |0009D8C3|EThreadsManager | |ThreadWrapper |611[11] | |00000020|03 |03F3FF8C|766F33A8|kernel32.dll|000133A8|kernel32 | |BaseThreadInitThunk | | |7FFFFFFE|04 |00000000|0069135B|pCRM7.exe |0029135B|uLoadSave |TLoadSaveThread|Create |121[3] | ------------------------------------------------------------------------------------------------------------------------------------------------- Processes Information: ---------------------- Assembler Information: ----------------------------------------------------------- ; Classes.TList.Get (Line=2991 - Offset=9) ; ---------------------------------------- 00436D15 add eax, +$7C08733B ; ; Line=2991 - Offset=14 ; --------------------- 00436D1A jnp +$6C414415 ; ; Line=2992 - Offset=20 ; --------------------- 00436D20 add [ebx+$E8038BCE], cl ; <-- EXCEPTION ; ; Line=2992 - Offset=26 ; --------------------- 00436D26 push ds ; ; Line=2992 - Offset=27 ; --------------------- 00436D27 DB $FF, $FF // ; ; Line=2992 - Offset=29 ; --------------------- 00436D29 dec dword ptr [ebx+$48B0443] ; ; Line=2993 - Offset=35 ; --------------------- 00436D2F mov al, $5E ; ; Line=2994 - Offset=37 ; --------------------- 00436D31 pop ebx ; ; Line=2994 - Offset=38 ; --------------------- 00436D32 ret Registers: ----------------------------- EAX: 0018FAC4 EDI: 00000001 EBX: 00000000 ESI: 0EEDFADE ECX: 00000007 EBP: 0018FB14 EDX: 00000000 ESP: 0018FAC4 EIP: 7583C41F FLG: 00000212 EXP: 00436D20 STK: 0018FB9C Stack: Memory Dump: ------------------ --------------------------------------------------------------------------- 0018FBD8: 00000000 00436D20: 00 8B CE 8B 03 E8 1E FF FF FF 8B 43 04 8B 04 B0 ...........C.... 0018FBD4: 0018FBEC 00436D30: 5E 5B C3 90 8B 50 0C 83 FA 40 7E 0E 8B CA 85 C9 ^[...P...@~..... 0018FBD0: 00503572 00436D40: 79 03 83 C1 03 C1 F9 02 EB 11 83 FA 08 7E 07 B9 y............~.. 0018FBCC: 0018FBEC 00436D50: 10 00 00 00 EB 05 B9 04 00 00 00 03 CA 8B D1 E8 ................ 0018FBC8: 02742020 00436D60: 64 01 00 00 C3 8D 40 00 53 33 C9 EB 01 41 3B 48 d.....@.S3...A;H 0018FBC4: 00000018 00436D70: 08 7D 08 8B 58 04 3B 14 8B 75 F2 3B 48 08 75 03 .}..X.;..u.;H.u. 0018FBC0: 02742020 00436D80: 83 C9 FF 8B C1 5B C3 90 53 56 57 8B F9 8B F2 8B .....[..SVW..... 0018FBBC: 00503514 00436D90: D8 85 F6 7C 05 3B 73 08 7E 0F 8B 15 44 41 6C 00 ...|.;s.~...DAl. 0018FBB8: 00000000 00436DA0: 8B CE 8B 03 E8 9F FE FF FF 8B 43 08 3B 43 0C 75 ..........C.;C.u 0018FBB4: 005034C4 00436DB0: 06 8B C3 8B 10 FF 12 8B 43 08 3B F0 7D 1A 2B C6 ........C.;.}.+. 0018FBB0: 0ABF0580 00436DC0: 8B C8 03 C9 03 C9 8B 43 04 8D 54 B0 04 8B 43 04 .......C..T...C. 0018FBAC: 00000001 00436DD0: 8D 04 B0 E8 A4 C6 FC FF 8B 43 04 89 3C B0 FF 43 .........C..<..C 0018FBA8: 00440AC0 00436DE0: 08 85 FF 74 0B 33 C9 8B D7 8B C3 8B 18 FF 53 04 ...t.3........S. 0018FBA4: 02742020 00436DF0: 5F 5E 5B C3 8B 50 08 4A E8 0F FF FF FF C3 8B C0 _^[..P.J........ 0018FBA0: 0000527C 00436E00: 53 56 57 55 8B F1 8B FA 8B D8 3B F7 74 45 85 F6 SVWU......;.tE.. 0018FB9C: 00436D2A 00436E10: 7C 05 3B 73 08 7C 0F 8B 15 44 41 6C 00 8B CE 8B |.;s.|...DAl.... |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |