![]() |
Zugriffsverletzung Adresse 0000000 beim beenden
Guten Morgen,
nach dem ich ein Programm von D6 auf XE portiert habe, bekommt dieses Programm ab und zu beim beenden eine Fehlermeldung beim lesen von Adresse 0000000. Die 0000000 wird wohl ein generischer Platzhalter sein. Ich frag mich wie ich das debuggen kann? Ab und zu läuft das Programm dadurch weiter. Ab und zu sogar mit 25% Leistung. Also quasi einem Kern. |
AW: Zugriffsverletzung Adresse 0000000 beim beenden
Hallo,
das sieht wie NIL-Zugriff aus. -> MadExcept oder etwas ähnliches benutzen. |
AW: Zugriffsverletzung Adresse 0000000 beim beenden
Oder auch einfach erstmal im Debugger startet und schauen, ob man nicht auch so schon sieht, wo es knallt. :stupid:
|
AW: Zugriffsverletzung Adresse 0000000 beim beenden
Ne leider nicht.
ich probiere es mal mit madExcept |
AW: Zugriffsverletzung Adresse 0000000 beim beenden
Wenn Du mit dem Debugger nicht weiter kommst, dann empfehle ich dir aus madExcept. Da kannst Du Dir dann einen komplette Call-Stack anzeigen lassen, für den Moment der Exception.
Da es Dir beim Beenden der Anwendung passiert, könnte Dir auch FastMM4 weiter helfen, da du hier auch solche Informationen anzeigen lassen kannst. Ist generell eine gute Option als Speichermanager für Delphi Anwendungen. ...:cat:... |
AW: Zugriffsverletzung Adresse 0000000 beim beenden
Ok ich habe das Crashlog von madExcept. Aber woran erkenne ich nun woran es gelegen hat?
exception message : Externe Exception C000001D Das war doch etwas aus der C Library welches Delphi nicht adressieren kann oder? Ich kenne die Meldung wenn ich z.b in Delphi übersetze und dann ein shell_execute aufrufe. Dann tritt der Fehler ab und zu auch auf. |
AW: Zugriffsverletzung Adresse 0000000 beim beenden
Also wenn es beim Beenden der Anwendung zu einer Exception kommt, dann sieht es so aus als wenn das Programm beim selbst Aufräumen noch auf etwas zugreifen will, was du schon freigegeben hast.
|
AW: Zugriffsverletzung Adresse 0000000 beim beenden
Ich gebe nichts frei worauf das Programm noch zugreifen will bzw. sollte.
Vor allem da es unter Delphi 6 ohne Probleme sich beendet hat und unter XE auch nur ab und zu dazu kommt. Auch haben nicht alle unsere Kunden das Problem das die Fehlermeldung kommt. |
AW: Zugriffsverletzung Adresse 0000000 beim beenden
Hänge doch das Crash-Log mal an - lässt sich im Dialog als TXT-Datei speichern.
...:cat:... |
AW: Zugriffsverletzung Adresse 0000000 beim beenden
Dann zerschießt du dir irgendwo den Speicher und hast bisher nur Glück gehabt.
|
AW: Zugriffsverletzung Adresse 0000000 beim beenden
Probier mal FastMM mit Fulldebugmode.
|
AW: Zugriffsverletzung Adresse 0000000 beim beenden
Anbei die Fehlermeldung vom dem external exception beim beenden.
Ich hab sie etwas gekürzt. Module und Prozesse entfernt.
Code:
date/time : 2017-10-11, 09:05:37, 943ms
computer name : TS01 wts client name : user name : registered owner : Windows-Benutzer operating system : Windows 2008 R2 x64 Service Pack 1 build 7601 system language : German system up time : 25 days 22 hours program up time : 1 minute 55 seconds processors : 8x Intel(R) Xeon(R) CPU E5645 @ 2.40GHz physical memory : 7042/8191 MB (free/total) free disk space : (C:) 222,03 GB display mode : 1920x1080, 16 bit process id : $e5c allocated memory : 47,44 MB largest free block : 792,48 MB executable : programm.exe exec. date/time : 2017-10-09 15:02 version : 1.0.0.0 compiled with : Delphi XE4 contact name : contact email : madExcept version : 4.0.18 callstack crc : $66ef8f7a, $82e8af82, $82e8af82 exception number : 1 exception class : EExternalException exception message : Externe Exception C000001D. main thread ($5d4): 00530051 +02d programm.exe System.Classes TStream.ReadBufferData 0067bfe5 +01d programm.exe Vcl.Menus TPopupList.MainWndProc 00541530 +014 programm.exe System.Classes StdWndProc 778e0107 +02b ntdll.dll KiUserCallbackDispatcher 004093d0 +008 programm.exe System 622 +0 TObject.Free 005bf685 +019 programm.exe Vcl.Controls DoneControls 005c12f7 +02b programm.exe Vcl.Controls Finalization 0040aada +03e programm.exe System 622 +0 FinalizeUnits 004ab290 +054 programm.exe madExcept InterceptFinalizeUnits 004ab298 +000 programm.exe madExcept InterceptHalt0FinalizeUnits 0040af11 +09d programm.exe System 622 +0 @Halt0 00b51802 +70a programm.exe P70 184 +109 initialization 765a3368 +010 kernel32.dll BaseThreadInitThunk thread $828: 778f1f3f +0b ntdll.dll NtWaitForWorkViaWorkerFactory 765a3368 +10 kernel32.dll BaseThreadInitThunk thread $a40: 778f0156 +0e ntdll.dll NtWaitForMultipleObjects 765a3368 +10 kernel32.dll BaseThreadInitThunk thread $1014: 778ef8ca +0e ntdll.dll NtWaitForSingleObject 76431497 +92 KERNELBASE.dll WaitForSingleObjectEx 765a118f +3e kernel32.dll WaitForSingleObjectEx 765a1143 +0d kernel32.dll WaitForSingleObject 004abec1 +0d programm.exe madExcept CallThreadProcSafe 004abf26 +32 programm.exe madExcept ThreadExceptFrame 765a3368 +10 kernel32.dll BaseThreadInitThunk >> created by main thread ($5d4) at: 74ae4c95 +00 winspool.drv thread $784: 778f1f3f +0b ntdll.dll NtWaitForWorkViaWorkerFactory 765a3368 +10 kernel32.dll BaseThreadInitThunk thread $b04: 778f1f3f +0b ntdll.dll NtWaitForWorkViaWorkerFactory 765a3368 +10 kernel32.dll BaseThreadInitThunk thread $8fc: 778f0156 +0e ntdll.dll NtWaitForMultipleObjects 764315e3 +fa KERNELBASE.dll WaitForMultipleObjectsEx 765a19f7 +89 kernel32.dll WaitForMultipleObjectsEx 76a10864 +00 USER32.dll MsgWaitForMultipleObjectsEx 76a10b64 +1a USER32.dll MsgWaitForMultipleObjects 004abec1 +0d programm.exe madExcept CallThreadProcSafe 004abf26 +32 programm.exe madExcept ThreadExceptFrame 765a3368 +10 kernel32.dll BaseThreadInitThunk >> created by main thread ($5d4) at: 745578e1 +00 gdiplus.dll thread $1750: 778f1f3f +0b ntdll.dll NtWaitForWorkViaWorkerFactory 765a3368 +10 kernel32.dll BaseThreadInitThunk cpu registers: eax = 02d04d0c ebx = 00000000 ecx = 08654e54 edx = 0018fd58 esi = 00290d72 edi = 00000000 eip = 0053004d esp = 0018fd30 ebp = 0018fd50 stack dump: 0018fd30 e8 bf 67 00 fc fd 18 00 - b4 a4 40 00 50 fd 18 00 ..g.......@.P... 0018fd40 00 00 00 00 72 0d 29 00 - 00 00 00 00 0c 4d d0 02 ....r.)......M.. 0018fd50 68 fd 18 00 32 15 54 00 - 1c 00 00 00 00 00 00 00 h...2.T......... 0018fd60 48 0c 00 00 00 00 00 00 - 94 fd 18 00 fa 62 a0 76 H............b.v 0018fd70 32 00 03 00 1c 00 00 00 - 00 00 00 00 48 0c 00 00 2...........H... 0018fd80 72 0d 29 00 cd ab ba dc - 00 00 00 00 00 00 00 00 r.)............. 0018fd90 72 0d 29 00 0c fe 18 00 - 3a 6d a0 76 72 0d 29 00 r.).....:m.vr.). 0018fda0 32 00 03 00 1c 00 00 00 - 00 00 00 00 48 0c 00 00 2...........H... 0018fdb0 bd 53 e7 60 00 00 00 00 - 32 00 03 00 38 89 7f 08 .S.`....2...8... 0018fdc0 24 00 00 00 01 00 00 00 - 00 00 00 00 00 00 00 00 $............... 0018fdd0 30 00 00 00 ff ff ff ff - ff ff ff ff e9 6c a0 76 0............l.v 0018fde0 00 00 00 00 30 c1 44 01 - 00 00 00 00 00 00 00 00 ....0.D......... 0018fdf0 00 00 00 00 b0 fd 18 00 - 70 9a 44 01 58 fe 18 00 ........p.D.X... 0018fe00 1e a6 a6 76 e9 c0 5f 16 - 00 00 00 00 68 fe 18 00 ...v.._.....h... 0018fe10 e8 6d a0 76 00 00 00 00 - 72 0d 29 00 32 00 03 00 .m.v....r.).2... 0018fe20 1c 00 00 00 00 00 00 00 - 48 0c 00 00 d8 ec 91 01 ........H....... 0018fe30 01 00 00 00 d9 53 e7 60 - 38 5d 7f 08 00 00 00 00 .....S.`8]...... 0018fe40 38 89 7f 08 86 58 06 75 - be 02 03 00 00 00 00 00 8....X.u........ 0018fe50 34 fe 18 00 00 00 00 00 - b4 fe 18 00 1e a6 a6 76 4..............v 0018fe60 49 c0 5f 16 fe ff ff ff - a4 fe 18 00 44 6e a0 76 I._.........Dn.v disassembling: 004093c8 public System.TObject.Free: ; function entry point 004093c8 622 test eax, eax 004093ca jz loc_4093d3 004093cc mov dl, 1 004093ce mov ecx, [eax] 004093d0 > call dword ptr [ecx-4] 004093d3 ret |
AW: Zugriffsverletzung Adresse 0000000 beim beenden
Liste der Anhänge anzeigen (Anzahl: 1)
Das ist, wie schon vorher vermutet, mit sehr hoher Wahrscheinlichkeit die doppelte Freigabe eines Objektes. Installiere Dir FastMM4 -
![]()
...:cat:... |
AW: Zugriffsverletzung Adresse 0000000 beim beenden
In einer Unit im Finalization Teil wird ein Objekt erneut freigegeben.
Bezüglich der FastMM Konfiguration: Ich verändere nie die Include-Datei sondern setze einfach "FullDebugMode" als Define (in den Projekt Optionen). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz