Einzelnen Beitrag anzeigen

databoss

Registriert seit: 2. Mär 2006
Ort: Hamburg
3 Beiträge
 
#1

Code Optimierung erzeugt Zugriffsverletzung

  Alt 20. Apr 2016, 21:35
Hallo Forum,

Ich habe einen sehr merkwürdigen Fehler, der mich bereits Stunden gekostet hat und für den ich bisher keine gute Lösung gefunden habe.
Vielleicht hat das jemand von Euch schon einmal etwas ähnliches gesehen?

Ich verwende das ORM Aurelius von TMS Software, dort im Forum habe ich leider keine Lösung bekommen.
Die Objekte werden dort per Framework automatisch erzeugt. Zwischen den Objekten Adresse und Person besteht eine 1:n Relation, dadurch wird Person.Adresse normalerweise mit dem passenden Daten befüllt, was sehr praktisch ist. Das lief bisher völlig problemlos.

Folgender Code:
Delphi-Quellcode:
   PersonList := FRepository.GetPersonList(MyKunde, 0, ''); // TList<TPerson>
   if PersonList.Count>0 then
     MyPerson := PersonList.Items[0];
   if MyPerson = nil then
   begin
     WriteLog('PDFLetter.CreateRechnung: Error: Person not found!');
     Exit;
   end;
   MyKunde := MyPerson.Kunde; // ohne Problem
   MyAdresse := MyPerson.Adresse; // << Zugriffsverletzung
   MyAdresse := FRepository.GetAdresse(MyPerson.Adresse.uid); // << genauso hier
Wenn ich nun compiliere mit Debug Einstellungen (ohne Code Optimierung) läuft alles ohne Probleme.
Aber mit den Release Einstellungen (mit Code Optimierungen) kommt es zu einer Zugriffsverletzung in der letzten Zeile.

Durch Logging habe ich herausgefunden, dass das Problem der Zugriff auf das Objekt MyPerson.Adresse ist, egal wie ich das versuche.
Es kommt zu immer zu folgendem Fehler:

Exception in class $C0000005 with message 'access violation at 0x01329c4c: read of address 0x00000005'

Sehr merkwürdig ist, dass ich ein ganz ähnliches Objekt habe MyPerson.Kunde habe und es dort mit und ohne Code Optimierung ohne Probleme geht.

Ich verwende Delphi Seattle 10 mit FireDAC und einer MSSQL DB dahinter.

Mit ist klar, dass dies vermutlich zumindest auch an dem verwendeten Aurelius Framework liegt, aber ich verstehe nicht wo und warum der Code Optimierer Grund zum wegoptimieren des Objektes Person.Adresse sieht und bei Person.Kunde nicht.

Derzeit habe ich die Code Optimierung auch für die Release builds ausgeschaltet, nicht schön aber geht.

Eine Idee? Schon einmal gehabt?
Was kann ich tun?
Florian
  Mit Zitat antworten Zitat