![]() |
Delphi-Version: 10.3 Rio
Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung
Hallo
Ein sehr grosses Delphi-Projekt erzeugt als 64bit Anwendung kompiliert in sehr seltenen, unregelmässigen und nicht reproduzierbaren Abständen an unterschiedlichen Stellen eine Zugriffsverletzung (Access Violation). Wird die Anwendung 1:1 als 32bit Anwendung kompiliert, funktioniert alles über Tage und Monate absolut fehlerfrei ohne auch nur einemal einen Fehler zu haben. Wie erwähnt, lässt sich der Fehler nie reproduzieren und der volle Funktionsumfang der Anwendung läuft manchmal über Stunden ohne eine Zugriffsverletzung. Dort wo der Fehler auftritt, tritt er bei einem weiteren Versuch nicht mehr auf. Es ist völlig zum verzweifeln und das Verhalten ist auch absolut unlogisch. Kann mir vielleicht jemand einen Tipp geben wie man einem solchen Problem begegnet? Was können die Ursachen dafür sein, dass die Anwendung absolut fehlerfrei läuft wenn diese als 32bit Applikation erzeugt wurde aber nicht als 64bit Version? Tools wie EurekaLog wurden schon eingesetzt aber konnten leider nicht helfen, da der Fehler eben nie reproduzierbar ist und eh nur äusserst selten und nicht immer auftritt. Die Access-Violations werden protokolliert und alles was ich habe sind die Speicheradressen an denen der Fehler jeweils aufgetreten ist. Zum Beispiel so: Zugriffsverletzung bei Adresse 0000000001BC2782 in Modul 'xyz.exe' Wie findet man aufgrund dieser Information heraus wo der Fehler entstanden ist und was die Ursache dafür war? Und warum nur als 64bit Anwendung? Und was nützt die Information, wenn beim nächsten Versuch an selber Stelle keine Fehler entsteht? Vielleicht hat jemand ein paar gute Tips was man noch tun könnte. Ich bin wirklich dankbar für jede Anregung. Danke und Gruss Delphitrixer |
AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung
Hallo,
kompiliere mit MadExept, dann wird dir die Stelle zumindestens angezeigt. |
AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung
Zitat:
Anhand des Mapfiles und der ausgegebenen Adresse kannst Du die Stelle evtl. auch selber finden, es sei denn es handelt sich um eine externe Exception. |
AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung
Zitat:
Was tun? "Halt" sauber programmieren. ;-). FixInsight. Und das bereits anderweitig erwähnte. |
AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung
Ich gehe bei solchen Fehlern so vor:
1) BreakPoint setzen z.B. auf erster Zeile im FormCreate oder so. 2) Anwendung starten 3) Wenn am BreakPoint angehalten wird in die CPU-Ansicht wechseln. 4) Dort mit Strg-G zu der Adresse gehen, die in der Exception angegeben wird, im Beispiel aus #1 wäre die Adresse $1BC2782. Dort wird dann in der Regel die Zeilennummer und der Pascal-Code gezeigt bei der der Fehler auftritt. Mit dieser Information kannst du dir dann Gedanken machen, was der Auslöser sein könnte. |
AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung
Zitat:
Ich würde so anfangen zu suchen: 1) Suche nach "Cardinal(" im gesamten Quellcode. Beim Pointer auf Int casten ein IntPtr nehmen. 2) Suche nach "Integer(" s.o. 3) Wurde für ein Handle statt eines THandle oder HWND ein Cardinal verwendet? |
AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung
Kann nicht direkt was beitragen hatte aber auch ein gravierendes Problem mit Arrays 64Bit/32Bit, 32Bit gibt mir die falsche länge zurück.
|
AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung
Hallo Zusammen
Ich bedanke mich schon einmal für Eure wertvollen Tips. So wie es aussieht, handelt es sich um eine externe Adresse bzw. die AV entsteht in einer der eingesetzten und zugekauften Komponenten. Das muss ich aber noch genau prüfen. Ich gehe jetzt einmal Eure Lösungsansätze durch. Könnte eine weile dauern, da ich wie erwähnt den Fehler auf meiner Entwicklungsumgebung noch nie reproduzieren konnte und auch sonst sehr selten auftritt. Aber Danke vorerst Euch allen. Wer noch mehr oder andere Lösungsansätze kennt, gerne weiter posten. :-D |
AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung
Zitat:
|
AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 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