AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung

Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung

Offene Frage von "delphitrixer"
Ein Thema von delphitrixer · begonnen am 9. Dez 2020 · letzter Beitrag vom 11. Dez 2020
Antwort Antwort
delphitrixer

Registriert seit: 12. Aug 2004
55 Beiträge
 
Delphi 10.3 Rio
 
#1

Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung

  Alt 9. Dez 2020, 13:18
Delphi-Version: 10.3 Rio
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung

  Alt 9. Dez 2020, 13:39
Hallo,
kompiliere mit MadExept, dann wird dir die Stelle zumindestens angezeigt.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung

  Alt 9. Dez 2020, 14:14
Hallo
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.
Um es zu reproduzieren muss die Anwendung dann selbstverständlich so lange laufen, bis auch ein Fehler auftritt, der von Eurekalog (oder MadExcept) protokolliert und analyisert werden kann.

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.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.397 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung

  Alt 9. Dez 2020, 14:30
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?
Zum Beispiel undefinierte weil nicht initialisierte Variablen. In 32-Bit liegt dann halt "zufällig" was auf dem Stack, was nicht zu einem Fehler führt.

Was tun? "Halt" sauber programmieren. . FixInsight.
Und das bereits anderweitig erwähnte.
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.043 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung

  Alt 9. Dez 2020, 15:41
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.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
240 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung

  Alt 9. Dez 2020, 15:45
Zitat:
Zugriffsverletzung bei Adresse 0000000001BC2782 in Modul 'xyz.exe'
Das sieht nach einer 64 bit Adresse aus, die mit 32 bit initialisiert wurde.

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?
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#7

AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung

  Alt 9. Dez 2020, 21:14
Kann nicht direkt was beitragen hatte aber auch ein gravierendes Problem mit Arrays 64Bit/32Bit, 32Bit gibt mir die falsche länge zurück.
  Mit Zitat antworten Zitat
delphitrixer

Registriert seit: 12. Aug 2004
55 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung

  Alt 11. Dez 2020, 07:03
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.
  Mit Zitat antworten Zitat
delphitrixer

Registriert seit: 12. Aug 2004
55 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung

  Alt 11. Dez 2020, 07:13
Das sieht nach einer 64 bit Adresse aus, die mit 32 bit initialisiert wurde.
Wie kann man denn eine Adresse in 32bit initialisieren wenn die Anwendung 64bit läuft? Wird da nicht automatisch alles mit 64bit initialisiert?
  Mit Zitat antworten Zitat
delphitrixer

Registriert seit: 12. Aug 2004
55 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Zugriffsverletzung (Access Violation) in 64bit jedoch nicht in 32bit Anwendung

  Alt 11. Dez 2020, 09:41
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.
Danke Amateurprofi. Dein Tipp hat schon einmal sehr geholfen. Damit konnte ich herausfinden, dass die AV definitiv in einer der verwendeten, zugekauften Komponenten von TMS entsteht. Das grenzt die Lösungssuche schon einmal sehr ein.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz