|
Antwort |
Registriert seit: 3. Sep 2004 434 Beiträge Delphi 10.4 Sydney |
#1
Delphi-Version: 2007
Hallo mal wieder!
Mein Projekt, dass seit Erzeugung vor einem Jahr fehlerfrei gelaufen ist, spinnt seit heute total. Nach dem Zufallsprinzip geht es -im fertigen .exe Modus- einfach kommentarlos zu, und beim Starten in Delphi kommt nach einiger Zeit folgendes Zustande:
Zitat:
---------------------------
Benachrichtigung über Debugger-Problem --------------------------- In Projekt <ProjektExe> trat ein Problem mit folgender Meldung auf: 'access violation at 0x68746f20: read of address 0x68746f20'. Prozess angehalten. Mit Einzelne Anweisung oder Start fortsetzen. --------------------------- OK --------------------------- :77050133 ntdll.KiUserExceptionDispatcher + 0xf :7709b46b ; ntdll.dll es steht nichts anderes im Aufruf-Stack drinnen. Das Programm hat mehrere Threads, die unter anderem mit MAPI auf Outlook, und ADO auf eine Datenbank zugreifen. In den Threads wird mit CoInitialize etc. gearbeitet. In den Threads habe ich mir bei on E: Exception einen Haltepunkt und Logbuchausgabe gemacht, ich habe das Programm mehrmals mit (jeweils einzeln installiert) EurekaLog und MadExcept gestartet --> beide liefern bei diesem Fehler keine Untersuchungsmöglichkeit, bekommen also noch nicht mal mit, dass es hier ein Problem gibt. Ich vermute, es gibt hier speziell bei dem Synchronize() der Threads irgendwelche Probleme, da beim Debuggen in Delphi in der "Threads-Liste" der erste Thread in der Liste (also (wohl?) der VCL/Hauptthread) mit "Fehler" steht. Ich bin Euch schon sehr dankbar, wenn mir bei dem aktuellen Problem weiter geholfen werden kann, noch mehr interessiert mich allerdings: -Wie kommt man selbst einem solchen Problem auf die Schliche? -Was (zur Hölle) kann ich mit den ganzen Pointer-Adressen anfangen? Wie komm ich von der Pointer-Adresse auf eine Prozedur, ein Objekt oder sonst etwas? -Was kann ich als Entwickler der Software mit "access violation at 0x68746f20: read of address 0x68746f20" anfangen? Wie finde ich Objekte und Variablen heraus, die auf diesen Speicherbereich verweisen? -Ich habe mir zwar hier das Debug-Tutorial auf der Seite durchgelesen, finde dort aber keine Herangehensweise die mir hier hilt, außer im Prinzip "alles Auskommentieren und solange wieder Zeilenweise hinzufügen, bis der Fehler wieder Auftritt". Das kann bei einem riesen Projekt mit zig möglichen Threads als Auslöser ja nicht die einzige Mögliche herangehensweise sein, oder? Gerade da der Fehler sporadisch Auftritt, fällt es schwer zu sagen, ob das Problem durch auskommentieren von X-Zeilen nun gelöst ist oder nicht... In letzter Zeit ist die Delphi-IDE wieder häufiger -beim eintippen, nicht beim ausführen- komplett mit einer ähnlichen ntdll.dll Meldung abgestürzt. Kann das was damit zu tun haben? *** EDIT 2: Ich habe das Projekt nun doch nach Delphi 2010 migriert, dort scheint das Abfangen mit EurekaLog zu funktionieren. Ist dies das Selbe oder ein anderes Problem? Hier scheint es laut dem Log einen Deadlock oder Stacküberlauf mit dem WM_MouseMove der TSectionListBox (Komponente von TMSsoftware.com) zu geben?
Code:
EurekaLog 7.0.6.72 RC 11
Exception: ------------------------------------------------------------------------------------------------------------- 2.2 Address: 76F79B56 2.5 Type : EAccessViolation 2.6 Message: Zugriffsverletzung bei Adresse 76F79B60 in Modul 'msvcrt.dll'. Schreiben von Adresse 00190000. 2.7 ID : 5BC70000 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=3356; Parent=0; Priority=0 | |Class=; Name=MAIN | |DeadLock=0; Wait Chain= | |Comment= | |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |7FFFFFFE|03 |00000000|76F79B56|msvcrt.dll |00009B56|msvcrt | | (possible memcpy+582) | | |00000020|04 |0018CC68|00543E1A|pCRM7.exe |00143E1A|EExceptionManager | |InternalInfo |1654[11] | |00000020|04 |0018CC80|00543E6E|pCRM7.exe |00143E6E|EExceptionManager | |InternalInfo |1658[15] | |00000020|04 |0018CCA4|00543F6B|pCRM7.exe |00143F6B|EExceptionManager |TExceptionManager |Info |1700[33] | |00000020|04 |0018CCD4|005442CE|pCRM7.exe |001442CE|EExceptionManager |TExceptionManager |Info |1789[18] | |00000020|04 |0018CFA8|0054438A|pCRM7.exe |0014438A|EExceptionManager |TExceptionManager |Info |1810[7] | |00000020|04 |0018CFCC|0054340C|pCRM7.exe |0014340C|EExceptionManager |TExceptionManager |Handle |1368[11] | |00000020|04 |0018CFF4|005469EE|pCRM7.exe |001469EE|EExceptionManager | |HandleException1 |2894[1] | |00000020|04 |0018D014|00427249|pCRM7.exe |00027249|EAppType | |_ExceptionManagerHandle |1764[2] | |00000020|04 |0018D028|005F01CE|pCRM7.exe |001F01CE|EAppVCL | |ApplicationShowExceptionHandler |50[9] | |00000020|04 |0018D05C|005F0255|pCRM7.exe |001F0255|EAppVCL | |ApplicationShowExceptionHook |80[17] | |00000020|04 |0018D06C|005B867A|pCRM7.exe |001B867A|Forms |TApplication |HandleException |9978[16] | |00000020|03 |0018D624|772EAFA3|KERNELBASE.dll|0000AFA3|KERNELBASE | | (possible lstrlenW+81) | | |00000020|03 |0018D6C0|74216A88|comctl32.dll |00096A88|comctl32 | | (possible DrawSizeBox+4859) | | |00000020|03 |0018D728|777C62F7|user32.dll |000162F7|USER32 | | (possible gapfnScSendMessage+815)| | |00000020|04 |0018D854|00406812|pCRM7.exe |00006812|System | |_HandleFinally |11892[58] | |00000020|04 |0018DA20|00406812|pCRM7.exe |00006812|System | |_HandleFinally |11892[58] | |00000020|04 |0018DA2C|004065E2|pCRM7.exe |000065E2|System | |_HandleAnyException |11332[100] | |00000020|04 |0018DA48|0046DFCC|pCRM7.exe |0006DFCC|Classes | |StdWndProc |13015[8] | |00000020|03 |0018DA60|777C62F7|user32.dll |000162F7|USER32 | | (possible gapfnScSendMessage+815)| | |00000020|03 |0018DA8C|777C6D35|user32.dll |00016D35|USER32 | | (possible DefWindowProcW+672) | | |00000020|03 |0018DB04|777C9659|user32.dll |00019659|USER32 | | (possible GetWindow+1003) | | |00000020|03 |0018DB48|777C96C0|user32.dll |000196C0|USER32 | |SendMessageW | | |00000020|04 |0018DB6C|0072F0AA|pCRM7.exe |0032F0AA|slstbox |TSectionListBox |WMMouseMove |2263[158] | |00000020|04 |0018FFF0|00690063|pCRM7.exe |00290063|DB |TParam |SetAsMemo |10978[3] | |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | | |Running Thread: ID=4536; Parent=3356; Priority=-1 | |Class=TOutlookReloadThread; Name=[Unnamed thread] Kind: TThread. Thread function: uClasses_ThreadedOutlookContact_Connector.TOutlookReloadThread.Execute. Thread caller: uClasses_ThreadedOutlookContact_Connector.TOutlookReloadThread.Create (uClasses_ThreadedOutlookContact_Connector.TOutlookReloadThread.Execute)| |DeadLock=0; Wait Chain=thread: [ 11B8 / 4536 ] is blocked | |Comment= | |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |7FFFFFFE|03 |00000000|77D7F8D1|ntdll.dll |0001F8D1|ntdll | |ZwWaitForSingleObject | | |00000020|03 |058AFC3C|7758118F|kernel32.dll |0001118F|kernel32 | |WaitForSingleObjectEx | | |00000020|03 |058AFC54|77581143|kernel32.dll |00011143|kernel32 | |WaitForSingleObject | | |00000020|04 |058AFC68|0046C2F6|pCRM7.exe |0006C2F6|Classes |TThread |Synchronize |11383[38] | |00000020|04 |058AFCB8|0046C3A9|pCRM7.exe |0006C3A9|Classes |TThread |Synchronize |11412[5] | |00000020|04 |058AFCC4|007186C5|pCRM7.exe |003186C5|uClasses_ThreadedOutlookContact_Connector|TOutlookReloadThread |Execute |438[200] | |00000020|04 |058AFCD4|00718739|pCRM7.exe |00318739|uClasses_ThreadedOutlookContact_Connector|TOutlookReloadThread |Execute |442[204] | |00000020|04 |058AFEF8|0046BAFA|pCRM7.exe |0006BAFA|Classes | |ThreadProc |11019[8] | |00000020|04 |058AFF28|0051A761|pCRM7.exe |0011A761|EThreadsManager | |NakedBeginThreadWrapper |1282[5] | |00000020|04 |058AFF38|0054678C|pCRM7.exe |0014678C|EExceptionManager | |DefaultThreadHandleException |2763[6] | |00000020|04 |058AFF44|005467B2|pCRM7.exe |001467B2|EExceptionManager | |DefaultThreadHandleException |2765[8] | |00000020|04 |058AFF5C|0051B260|pCRM7.exe |0011B260|EThreadsManager | |ThreadWrapperCT |1672[17] | |00000020|03 |058AFF8C|77583368|kernel32.dll |00013368|kernel32 | |BaseThreadInitThunk | | |7FFFFFFE|04 |00000000|007175F5|pCRM7.exe |003175F5|uClasses_ThreadedOutlookContact_Connector|TOutlookReloadThread |Create |201[3] | |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | | |Running Thread: ID=5428; Parent=3356; Priority=0 | |Class=TLoadSaveThread; Name=[Unnamed thread] Kind: TThread. Thread function: uLoadSave.TLoadSaveThread.Execute. Thread caller: uLoadSave.TLoadSaveThread.Create (uLoadSave.TLoadSaveThread.Execute)| |DeadLock=0; Wait Chain=thread: [ 1534 / 5428 ] is blocked | |Comment= | |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |7FFFFFFE|03 |00000000|77D7F8D1|ntdll.dll |0001F8D1|ntdll | |ZwWaitForSingleObject | | |00000020|03 |059AF9CC|7758118F|kernel32.dll |0001118F|kernel32 | |WaitForSingleObjectEx | | |00000020|03 |059AF9E4|77581143|kernel32.dll |00011143|kernel32 | |WaitForSingleObject | | |00000020|04 |059AF9F8|0046C2F6|pCRM7.exe |0006C2F6|Classes |TThread |Synchronize |11383[38] | |00000020|04 |059AFA48|0046C3A9|pCRM7.exe |0006C3A9|Classes |TThread |Synchronize |11412[5] | |00000020|04 |059AFA54|00795C91|pCRM7.exe |00395C91|uLoadSave |TLoadSaveThread |Execute |1902[1388] | |00000020|04 |059AFA64|00795CC4|pCRM7.exe |00395CC4|uLoadSave |TLoadSaveThread |Execute |1904[1390] | |00000020|04 |059AFA70|00795CF5|pCRM7.exe |00395CF5|uLoadSave |TLoadSaveThread |Execute |1907[1393] | |00000020|04 |059AFEF8|0046BAFA|pCRM7.exe |0006BAFA|Classes | |ThreadProc |11019[8] | |00000020|04 |059AFF28|0051A761|pCRM7.exe |0011A761|EThreadsManager | |NakedBeginThreadWrapper |1282[5] | |00000020|04 |059AFF38|0054678C|pCRM7.exe |0014678C|EExceptionManager | |DefaultThreadHandleException |2763[6] | |00000020|04 |059AFF44|005467B2|pCRM7.exe |001467B2|EExceptionManager | |DefaultThreadHandleException |2765[8] | |00000020|04 |059AFF5C|0051B260|pCRM7.exe |0011B260|EThreadsManager | |ThreadWrapperCT |1672[17] | |00000020|03 |059AFF8C|77583368|kernel32.dll |00013368|kernel32 | |BaseThreadInitThunk | | |7FFFFFFE|04 |00000000|0078FECB|pCRM7.exe |0038FECB|uLoadSave |TLoadSaveThread |Create |122[3] | |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | | |Running Thread: ID=4708; Parent=3356; Priority=-1 | |Class=TThreadedOutlookMailBoxScanner; Name=[Unnamed thread] Kind: TThread. Thread function: uClasses_ThreadedMailboxScanner.TThreadedOutlookMailBoxScanner.Execute. Thread caller: uClasses_ThreadedMailboxScanner.TThreadedOutlookMailBoxScanner.Create (uClasses_ThreadedMailboxScanner.TThreadedOutlookMailBoxScanner.Execute)| |DeadLock=0; Wait Chain=thread: [ 1264 / 4708 ] is blocked | |Comment= | |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |7FFFFFFE|03 |00000000|77D7FD91|ntdll.dll |0001FD91|ntdll | |ZwDelayExecution | | |00000020|03 |05CAFDB8|772F4493|KERNELBASE.dll|00014493|KERNELBASE | |Sleep | | |00000020|04 |05CAFDC8|0074CABC|pCRM7.exe |0034CABC|uClasses_ThreadedMailboxScanner |TThreadedOutlookMailBoxScanner|Execute |444[132] | |00000020|04 |05CAFDD4|0074CB05|pCRM7.exe |0034CB05|uClasses_ThreadedMailboxScanner |TThreadedOutlookMailBoxScanner|Execute |331[19] | |00000020|04 |05CAFEF8|0046BAFA|pCRM7.exe |0006BAFA|Classes | |ThreadProc |11019[8] | |00000020|04 |05CAFF28|0051A761|pCRM7.exe |0011A761|EThreadsManager | |NakedBeginThreadWrapper |1282[5] | |00000020|04 |05CAFF38|0054678C|pCRM7.exe |0014678C|EExceptionManager | |DefaultThreadHandleException |2763[6] | |00000020|04 |05CAFF44|005467B2|pCRM7.exe |001467B2|EExceptionManager | |DefaultThreadHandleException |2765[8] | |00000020|04 |05CAFF5C|0051B260|pCRM7.exe |0011B260|EThreadsManager | |ThreadWrapperCT |1672[17] | |00000020|03 |05CAFF8C|77583368|kernel32.dll |00013368|kernel32 | |BaseThreadInitThunk | | |7FFFFFFE|04 |00000000|0074C1A1|pCRM7.exe |0034C1A1|uClasses_ThreadedMailboxScanner |TThreadedOutlookMailBoxScanner|Create |275[4] | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Modules Information: ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |Handle |Name |Description |Version |Size |Modified |Path | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |00370000|symsrv.dll |Symbol Server |6.12.2.633 |131856 |2013-08-20 13:59:22|C:\Program Files (x86)\EurekaLab\EurekaLog 7\Bin\ | |00400000|pCRM7.exe | | |15424788|2013-11-19 15:46:53|C:\05_Develop\crm7\ | |02640000|olepro32.dll | |6.1.7601.17514 |90112 |2010-11-21 04:24:03|C:\Windows\System32\ | |045C0000|dbghelp.dll |Windows Image Helper |6.12.2.633 |1213200 |2013-08-20 13:59:24|C:\Program Files (x86)\EurekaLab\EurekaLog 7\Bin\ | |04830000|msadcer.dll |OLE DB Cursor Engine Resources |6.1.7600.16385 |8192 |2009-07-14 02:06:52|C:\Program Files (x86)\Common Files\System\msadc\ | |04B00000|oledb32r.dll |OLE DB Core Services-Ressourcen |6.1.7600.16385 |81920 |2009-07-14 02:09:16|C:\Program Files (x86)\Common Files\System\Ole DB\ | |0F9A0000|vbajet32.dll |Visual Basic for Applications Development Environment - Expression Service Loader|6.0.1.9431 |30749 |2009-07-14 02:16:17|C:\Windows\System32\ | |0F9C0000|expsrv.dll |Visual Basic for Applications Runtime - Expression Service |6.0.72.9589 |380957 |2009-07-14 02:15:20|C:\Windows\System32\ | |13C10000|msadce.dll |OLE DB Cursor Engine |6.1.7601.17514 |561152 |2010-11-21 04:24:15|C:\Program Files (x86)\Common Files\System\msadc\ | |1ABC0000|msjetoledb40.dll | |4.0.9756.0 |364544 |2009-07-14 02:15:45|C:\Windows\SysWOW64\ | |1B140000|oledb32.dll |OLE DB Core Services |6.1.7601.17514 |864256 |2010-11-21 04:24:02|C:\Program Files (x86)\Common Files\System\Ole DB\ | |1CB40000|msado15.dll |ActiveX Data Objects |6.1.7601.17857 |1019904 |2013-05-16 19:40:56|C:\Program Files (x86)\Common Files\System\ado\ | |41590000|msdart.dll |OLE DB Runtime Routines |6.1.7600.16385 |126976 |2009-07-14 02:15:43|C:\Windows\System32\ | |57AC0000|OFFICE.ODF | |14.0.7109.5000 |4300456 |2013-09-05 00:14:10|C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\Cultures\ | |57EE0000|OLMAPI32.DLL |Extended MAPI 1.0 for Windows NT |14.0.7109.5000 |3323584 |2013-09-06 19:59:50|C:\Program Files (x86)\Microsoft Office\Office14\ | |583C0000|RICHED20.DLL |RichEdit Version 6.0 |14.0.7008.1000 |1367640 |2013-01-15 11:33:16|C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\ | |58640000|MSO.DLL |Microsoft Office 2010 component |14.0.7106.5003 |18612928|2013-09-12 12:14:42|C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\ | |5AAC0000|msjtes40.dll |Microsoft Jet Expression Service |4.0.9756.0 |290816 |2009-07-14 02:15:45|C:\Windows\SysWOW64\ | |5AD60000|msvcr90.dll |Microsoft® C Runtime Library |9.0.30729.6161 |653136 |2013-05-16 21:48:25|C:\Windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_50934f2ebcb7eb57\ | |5C2E0000|msvcp90.dll |Microsoft® C++ Runtime Library |9.0.30729.6161 |569680 |2013-05-16 21:48:25|C:\Windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_50934f2ebcb7eb57\ | |63330000|oleacc.dll |Active Accessibility Core Component |7.0.0.0 |233472 |2013-05-16 19:36:40|C:\Windows\System32\ | |6E7B0000|atl.dll |ATL Module for Windows XP (Unicode) |3.5.2284.0 |70144 |2009-07-14 02:14:57|C:\Windows\System32\ | |6E7D0000|comsvcs.dll |COM+ Services |2001.12.8530.16385|1242112 |2009-07-14 02:15:07|C:\Windows\System32\ | |6E920000|msjint40.dll |Microsoft Jet-Datenbankmodul - Internationale DLL |4.0.9756.0 |24576 |2009-07-14 02:15:45|C:\Windows\SysWOW64\ | |6E930000|msjter40.dll |Microsoft Jet Database Engine Error DLL |4.0.9756.0 |61440 |2009-07-14 02:15:45|C:\Windows\SysWOW64\ | |6E960000|mswstr10.dll |Microsoft Jet Sort Library |4.0.9756.0 |618496 |2009-07-14 02:15:51|C:\Windows\SysWOW64\ | |6EA10000|msjet40.dll |Microsoft Jet Engine Library |4.0.9756.0 |1589248 |2009-07-14 02:15:44|C:\Windows\SysWOW64\ | |71450000|apphelp.dll |Clientbibliothek für Anwendungskompatibilität |6.1.7601.17514 |295936 |2010-11-21 04:24:14|C:\Windows\System32\ | |71AF0000|bcryptprimitives.dll |Windows Cryptographic Primitives Library |6.1.7600.16385 |249680 |2009-07-14 02:17:54|C:\Windows\SysWOW64\ | |71B70000|bcrypt.dll |Windows Cryptographic Primitives Library (Wow64) |6.1.7600.16385 |80896 |2009-07-14 02:11:20|C:\Windows\System32\ | |71BB0000|GdiPlus.dll |Microsoft GDI+ |6.1.7601.18120 |1625088 |2013-04-03 05:50:20|C:\Windows\winsxs\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.18120_none_72d2e82386681b36\ | |71F10000|winmm.dll |MCI API-DLL |6.1.7601.17514 |194048 |2010-11-21 04:24:16|C:\Windows\System32\ | |72430000|ntmarta.dll |Windows NT MARTA-Anbieter |6.1.7600.16385 |121856 |2009-07-14 02:16:11|C:\Windows\System32\ | |72460000|uxtheme.dll |Microsoft UxTheme-Bibliothek |6.1.7600.16385 |245760 |2009-07-14 02:11:24|C:\Windows\System32\ | |72AC0000|msi.dll |Windows Installer |5.0.7601.17807 |2342400 |2012-04-07 12:26:29|C:\Windows\System32\ | |72D40000|sxs.dll |Fusion 2.5 |6.1.7601.17514 |380416 |2010-11-21 04:24:16|C:\Windows\System32\ | |72DB0000|RpcRtRemote.dll |Remote RPC Extension |6.1.7601.17514 |46080 |2010-11-21 04:24:14|C:\Windows\System32\ | |72DC0000|rsaenh.dll |Microsoft Enhanced Cryptographic Provider |6.1.7600.16385 |242936 |2009-07-14 02:17:54|C:\Windows\System32\ | |72E60000|cryptsp.dll |Cryptographic Service Provider API |6.1.7600.16385 |78848 |2009-07-14 02:15:07|C:\Windows\System32\ | |74120000|winspool.drv |Windows-Spoolertreiber |6.1.7601.17514 |320000 |2010-11-21 04:24:08|C:\Windows\System32\ | |74180000|comctl32.dll |Bibliothek für Steuerelemente |6.10.7601.17514 |1680896 |2010-11-21 04:23:55|C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.17514_none_41e6975e2bd6f2b2\| |74330000|version.dll |Version Checking and File Installation Libraries |6.1.7600.16385 |21504 |2009-07-14 02:16:17|C:\Windows\System32\ | |74BF0000|msimg32.dll |GDIEXT Client DLL |6.1.7600.16385 |4608 |2009-07-14 02:15:44|C:\Windows\System32\ | |75770000|CRYPTBASE.dll |Base cryptographic API DLL |6.1.7600.16385 |36864 |2009-07-14 02:15:07|C:\Windows\SysWOW64\ | |75780000|sspicli.dll |Security Support Provider Interface |6.1.7601.18270 |96768 |2013-09-25 02:58:17|C:\Windows\SysWOW64\ | |759C0000|shlwapi.dll |Shell Light-weight-Dienstprogrammbibliothek |6.1.7601.17514 |350208 |2010-11-21 04:23:48|C:\Windows\SysWOW64\ | |75A20000|shell32.dll |Allgemeine Windows-Shell-DLL |6.1.7601.18222 |12872704|2013-07-26 02:55:59|C:\Windows\SysWOW64\ | |76A80000|Wldap32.dll |Win32 LDAP-API-DLL |6.1.7601.17514 |269824 |2010-11-21 04:24:16|C:\Windows\SysWOW64\ | |76AD0000|crypt32.dll |Krypto-API32 |6.1.7601.18277 |1168384 |2013-10-05 20:57:25|C:\Windows\SysWOW64\ | |76C00000|gdi32.dll |GDI Client DLL |6.1.7601.18275 |311808 |2013-10-03 03:00:44|C:\Windows\SysWOW64\ | |76C90000|msctf.dll |MSCTF-Server-DLL |6.1.7600.16385 |828928 |2009-07-14 02:15:43|C:\Windows\SysWOW64\ | |76D60000|clbcatq.dll |COM+ Configuration Catalog |2001.12.8530.16385|522240 |2009-07-14 02:15:03|C:\Windows\SysWOW64\ | |76DF0000|ole32.dll |Microsoft OLE für Windows |6.1.7601.17514 |1414144 |2010-11-21 04:24:01|C:\Windows\SysWOW64\ | |76F60000|msasn1.dll |ASN.1 Runtime APIs |6.1.7601.17514 |34304 |2010-11-21 04:23:48|C:\Windows\SysWOW64\ | |76F70000|msvcrt.dll |Windows NT CRT DLL |7.0.7601.17744 |690688 |2013-05-16 19:38:16|C:\Windows\SysWOW64\ | |771D0000|imm32.dll |Multi-User Windows IMM32 API Client DLL |6.1.7601.17514 |119808 |2010-11-21 04:24:25|C:\Windows\System32\ | |77240000|advapi32.dll |Erweiterte Windows 32 Base-API |6.1.7601.18247 |640512 |2013-08-29 02:48:17|C:\Windows\SysWOW64\ | |772E0000|KERNELBASE.dll |Client-DLL für Windows NT-Basis-API |6.1.7601.18229 |274944 |2013-08-02 02:50:42|C:\Windows\SysWOW64\ | |773A0000|rpcrt4.dll |Remoteprozeduraufruf-Laufzeitumgebung |6.1.7601.18205 |663552 |2013-07-09 05:52:33|C:\Windows\SysWOW64\ | |774A0000|imagehlp.dll |Windows NT Image Helper |6.1.7601.17787 |159232 |2013-05-16 19:38:24|C:\Windows\SysWOW64\ | |774D0000|lpk.dll |Language Pack |6.1.7601.18177 |25600 |2013-06-06 05:57:01|C:\Windows\SysWOW64\ | |774E0000|psapi.dll |Process Status Helper |6.1.7600.16385 |6144 |2009-07-14 02:16:12|C:\Windows\SysWOW64\ | |77570000|kernel32.dll |Client-DLL für Windows NT-Basis-API |6.1.7601.18229 |1114112 |2013-08-02 02:50:41|C:\Windows\SysWOW64\ | |776B0000|usp10.dll |Uniscribe Unicode script processor |1.626.7601.18009 |626688 |2012-11-22 05:45:03|C:\Windows\SysWOW64\ | |777B0000|user32.dll |Multi-User Windows USER API Client DLL |6.1.7601.17514 |833024 |2010-11-21 04:24:20|C:\Windows\SysWOW64\ | |778B0000|oleaut32.dll | |6.1.7601.17676 |571904 |2013-05-16 19:36:40|C:\Windows\SysWOW64\ | |77940000|sechost.dll |Host for SCM/SDDL/LSA Lookup APIs |6.1.7600.16385 |92160 |2009-07-14 02:16:13|C:\Windows\SysWOW64\ | |77D30000|api-ms-win-downlevel-advapi32-l1-1-0.dll|ApiSet Stub DLL |6.2.9200.16492 |10752 |2013-01-13 22:16:42|C:\Windows\SysWOW64\ | |77D60000|ntdll.dll |DLL für NT-Layer |6.1.7601.18247 |1292192 |2013-08-29 02:50:30|C:\Windows\SysWOW64\ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Processes Information: ---------------------- Assembler Information: -------------------------------------------------------------------------- ; Base Address: $76F79000, Allocation Base: $76F70000, Region Size: 618496 ; Allocation Protect: PAGE_EXECUTE_WRITECOPY, Protect: PAGE_EXECUTE_READ ; State: MEM_COMMIT, Type: MEM_IMAGE ; ; ; msvcrt. (possible memcpy+547) (Line=0 - Offset=547) ; --------------------------------------------------- 76F79B33 C3 RET 76F79B34 8A4603 MOV AL, [ESI+3] 76F79B37 884703 MOV [EDI+3], AL 76F79B3A 8A4602 MOV AL, [ESI+2] 76F79B3D 884702 MOV [EDI+2], AL 76F79B40 8B4508 MOV EAX, [EBP+8] 76F79B43 5E POP ESI 76F79B44 5F POP EDI 76F79B45 C9 LEAVE 76F79B46 C3 RET 76F79B47 8A4603 MOV AL, [ESI+3] 76F79B4A 884703 MOV [EDI+3], AL 76F79B4D 8A4602 MOV AL, [ESI+2] 76F79B50 884702 MOV [EDI+2], AL 76F79B53 8A4601 MOV AL, [ESI+1] ; ; msvcrt. (possible memcpy+582) (Line=0 - Offset=582) ; --------------------------------------------------- 76F79B56 884701 MOV [EDI+1], AL ; <-- EXCEPTION 76F79B59 8B4508 MOV EAX, [EBP+8] 76F79B5C 5E POP ESI 76F79B5D 5F POP EDI 76F79B5E C9 LEAVE Registers: ----------------------------- EAX: ???? EDI: ???? EBX: ???? ESI: ???? ECX: ???? EBP: ???? EDX: ???? ESP: ???? EIP: ???? FLG: ???? EXP: 76F79B56 STK: 0018CC64 Stack: Memory Dump: ------------------ --------------------------------------------------------------------------- 0018CCA0: 0018CCC8 76F79B56: 88 47 01 8B 45 08 5E 5F C9 C3 F3 A5 FF 24 95 B8 .G..E.^_.....$.. 0018CC9C: 0054B757 76F79B66: 99 F7 76 8A 06 88 07 8A 46 01 88 47 01 8B 45 08 ..v.....F..G..E. 0018CC98: 0018CCA4 76F79B76: 5E 5F C9 C3 83 3D 44 00 01 77 00 0F 84 B5 FD FF ^_...=D..w...... 0018CC94: 0054B729 76F79B86: FF 57 56 83 E7 0F 83 E6 0F 3B FE 5E 5F 0F 85 A3 .WV......;.^_... 0018CC90: 0018CCC8 76F79B96: FD FF FF 5E 5F 5D E9 12 04 00 00 55 8B EC 83 EC ...^_].....U.... 0018CC8C: 01B2166C 76F79BA6: 20 83 E4 F0 D9 C0 D9 54 24 18 DF 7C 24 10 DF 6C ......T$..|$..l 0018CC88: 1177977C 76F79BB6: 24 10 8B 54 24 18 8B 44 24 10 85 C0 0F 84 07 02 $..T$..D$....... 0018CC84: 11CB57EC 76F79BC6: 00 00 DE E9 85 D2 0F 88 09 5E 00 00 D9 1C 24 8B .........^....$. 0018CC80: 117F8A9C 76F79BD6: 0C 24 81 C1 FF FF FF 7F 83 D8 00 8B 54 24 14 83 .$..........T$.. 0018CC7C: 0DAC0D2C 76F79BE6: DA 00 C9 C3 83 3D 44 00 01 77 00 75 0A E9 BE FB .....=D..w.u.... 0018CC78: 00000000 76F79BF6: FF FF 90 90 90 90 90 8B C0 55 8B EC 83 EC 10 89 .........U...... 0018CC74: 0055BE50 76F79C06: 7D FC 8B 45 08 99 8B F8 33 FA 2B FA 83 E7 0F 33 }..E....3.+....3 0018CC70: 0055BE50 76F79C16: FA 2B FA 85 FF 0F 85 95 00 00 00 8B 4D 10 8B D1 .+..........M... 0018CC6C: 0018CC90 76F79C26: 83 E2 7F 89 55 F4 3B CA 74 12 2B CA 51 50 E8 2E ....U.;.t.+.QP.. 0018CC68: 0054BB44 76F79C36: 00 00 00 83 C4 08 8B 45 08 8B 55 F4 85 D2 74 15 .......E..U...t. 0018CC64: 0018CC98 76F79C46: 03 45 10 2B C2 89 45 F8 33 C0 8B 7D F8 8B 4D F4 .E.+..E.3..}..M. *** Aus ursprünglicher Frage: Anbei ein Beispiel für eine mögliche Fehlerquelle: eine Prozedur, die vom Thread mit Synchronize aufgerufen wird:
Delphi-Quellcode:
Vielen Dank!
{$Region 'procedure TThreadedOutlookMailBoxScanner.SyncMails;'}
procedure TThreadedOutlookMailBoxScanner.SyncMails; var i, j: integer; blFail: Boolean; blGefunden: Boolean; blChanged: Boolean; tmpMail: TMail; CrashCount, VerifyTick: Cardinal; begin try blChanged := False; VerifyTick := GetTickCount; for i := 0 to FclMail.Count - 1 do begin blGefunden := False; for j := 0 to clMail.Count - 1 do begin if TMail(FclMail.Items[i]).EntryID = TMail(clMail.Items[j]).EntryID then begin if not TMail(FclMail.Items[i]).Equals(TMail(clMail.Items[j])) then begin TMail(clMail.Items[j]).Assign(TMail(FclMail.Items[i])); blChanged := True; end; TMail(clMail.Items[j]).VerifiedTick := VerifyTick; blGefunden := True; Break; end; end; if not blGefunden then begin tmpMail := TMail.Create(NIL); tmpMail.Assign(TMail(FclMail.Items[i])); tmpMail.VerifiedTick := VerifyTick; clMail.Add(tmpMail); blChanged := True; end; end; i := 0; CrashCount := GetTickCount + 10000; while (i < clMail.Count) and (GetTickCount < CrashCount) do begin if Mail(i).VerifiedTick <> VerifyTick then begin clMail.Delete(i); blChanged := True; end else begin inc(i); end; end; {$Region 'Nach Eingangsdatum/-Uhrzeit sortieren / Neu nach Alt'} repeat blFail := False; for i := 0 to clMail.Count - 2 do begin if TMail(clMail.Items[i]).SentOn < TMail(clMail.Items[i+1]).SentOn then begin clMail.Move(i, i+1); blFail := True; end; end; until not blFail; {$EndRegion} if blChanged and assigned(OnChange) then begin OnChange(Self); end; except on E: SysUtils.Exception do begin Log('TThreadedOutlookMailBoxScanner.SyncMails', M, E.Message, ws_SEVERITY_EXCEPTION); end; end; end; {$EndRegion} Geändert von berens (19. Nov 2013 um 15:57 Uhr) |
Zitat |
Registriert seit: 16. Feb 2008 Ort: Baden-Württemberg 2.332 Beiträge Delphi 2007 Professional |
#2
Bei Threads solltest du so vorgehen, dass du alle Exceptions abfängst.
Mit folgendem Code verhinderst du dass dir eine Exception durch die Lappen geht. ReturnValue kann zusätzlich dazu benützt werden einen Fehler für den Starter des Threads zu signalisieren.
Delphi-Quellcode:
procedure TMeinThread.InternalExecute;
begin // hier kommt der Code rein, der ürsprünglich in Execute stand end; procedure TMeinThread.Execute; begin try InternalExecute; ReturnValue := 0; except on E:Exception do begin ReturnValue := 1; // hier die Exception loggen end; end; end;
fork me on Github
|
Zitat |
Registriert seit: 10. Jun 2003 Ort: Berlin 9.648 Beiträge Delphi 11 Alexandria |
#3
Ich würde als allererstes die Threads mit TThread.NameThreadForDebugging so benennen, dass du weißt welcher Thread eigentlich was macht:
http://docwiki.embarcadero.com/Libra...adForDebugging Damit bekommst du den verursachenden Thread vielleicht ja schon heraus.
Sebastian Jänicke
AppCentral |
Zitat |
Registriert seit: 3. Sep 2004 434 Beiträge Delphi 10.4 Sydney |
#4
@sx2008: Generell gute Idee. Im Prinzip hab ich das schon so, nur verwende ich aktuell nicht explizit nochmal eine andere Prozedur. Werde ich aber wohl auch bei Gelegenheit ändern, da man so wirklich nur eine einzige "Except"-Stelle hat. Die Frage ist allerdings: Aktuell mache ich noch ein "CleanUp" in der .Execute, falls mit try..except was nicht geklappt hat (Objekte löschen etc.). Das kann ich dann jetzt nicht mehr machen, oder müsste es in dieser Prozedur hintendran schreiben?
@jaenicke: Hab ich jetzt gemacht. Das sollte zumindest mal Helfen, die eigenen Threads klar im Auge behalten zu können. *** EDIT: Ich habe von der TMS-Komponente damals glücklicherweise den Quellcode mitgekauft. Bei der TSectionListBox habe ich das komplette WM_MouseMove herausgenommen (War nur so eine "hervorheben" Funktion der Komponente), aktuell scheint es zu klappen. Da der Fehler nur sporadisch aufritt, und die Fehlermeldung hier nun eine andere ist wie die mit ntdll.dll unter Delphi 2007 kann ich noch nicht sagen, ob das Problem definitiv gelöst ist. @4dk2: Ja, habe auch madExept mit Delphi 2007 versucht, aber der konnte keine Exception (ab)fangen. Geändert von berens (19. Nov 2013 um 16:39 Uhr) |
Zitat |
Registriert seit: 4. Sep 2007 176 Beiträge |
#5
Eureka Log hab ich noch nie benutzt, schon mal nen andern stack tracer versucht? Madexcept oder evtl. jclDebug von jedi tools?
die logs sehen nen bisschen danach aus, als ob der alles aus dem exception stack ausliest, bei mir war das schon mal bei jclDebug, dass da ntdll.dll und co drin stand, als ich den ExceptionTrace mit zu viel Parametern gestartet habe. Obwohl die eigentliche Exeception einfach der Zugriff auf ein nicht initialisiertes Objekt war. Das andere ist, dass du gesagt hast das dort ein Stackoverflow auftritt in einer TSectionListBox Auftritt, bei WMMouseMove. Ist nicht so ganz nachvollziehbar warum das nach einem Aufruf von SetAsMemo von TParam passiert. |
Zitat |
Registriert seit: 16. Feb 2008 Ort: Baden-Württemberg 2.332 Beiträge Delphi 2007 Professional |
#6
Die Frage ist allerdings: Aktuell mache ich noch ein "CleanUp" in der .Execute, falls mit try..except was nicht geklappt hat (Objekte löschen etc.).
Objekte die im Konstruktor erzeugt wurden werden im Destruktor freigegeben. Wenn du etwas in Execute anlegst dann sollte man es dort auch mit Hilfe eines Resourcenschutzblocks (try...finally) wieder freigeben. Wenn die Schachtelung von try...except und try...finally unübersichtlich wird dann kann man auch einfach eine weitere Unterfunktion verwenden um die Sache zu entflechten. Bei Threads ist es empfehlenswert wenn man dem Thread von aussen (z.B. über Parameter im Konstruktor) benötigte Objekte übergibt. Bei COM-Unterfaces muss man allerdings vorsichtig sein, den diese müssen "gemarshalt" werden. Mit ist bei deinem Code noch aufgefallen, dass viele unnötige Casts enthalten sind. Man sollte Zwischenvariablen verwenden damit die Sache klarer wird:
Delphi-Quellcode:
var
m1, m2 : TMail; ... for i := 0 to FclMail.Count - 1 do begin blGefunden := False; m1 := TMail(FclMail.Items[i]); // Zwischenvariable belegen for j := 0 to clMail.Count - 1 do begin m2 := TMail(clMail.Items[j]); // Zwischenvariable belegen if m1.EntryID = m2.EntryID then begin // so wird der Vergleich einfacher ...
fork me on Github
|
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
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 |
LinkBack URL |
About LinkBacks |