Einzelnen Beitrag anzeigen

hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#1

Wie Systemexception Ursache finden?

  Alt 6. Apr 2009, 12:07
Hallo,

ich ärgere ich bereits seit zwei Tagen mit einer Exception herum, die mich langsam in den Wahnsinn treibt.

Das Programm in D2009.

Ich lege in einer SQL-Datenbank einen Gruppenkopf an. Dann importiere ich ein paar Datensätze in die Bewegungsdatei.
Öffne ich jetzt das Bearbeitungsmodul, dann kommt es zu einer Excption immer an der gleichen Stelle. (Fehlermeldung in der Anlage)
Klicke ich die Fehlermeldung weg, dann funktioniert das Bearbeitungsmodul.
Bei allen folgenden Programmstarts funktioniert das Programm dann klaglos.
Wiederhole ich jetzt den Vorgang Datensätze löschen- Neuanlegen, dann kommt beim ersten Start des Bearbeitungsmoduls wieder einmalig der Fehler.

Mit der Datenbank (Firebird) kann es nicht zusammenhängen.
Ich habe vor dem Öffnen des Bearbeitungsmoduls ein Backup erzeugt. Nach dem Auftreten des Fehlers ein Restore. Dadurch wurde dieser nicht
reproduzierbar.

Irgendwie hängen die TMS - ADV Menüs da mit drin.
Ich kann den Fehler fast an beliebiger Stelle im Initialisierungsteil der Datenstruktur durch ein Application.Processmessages auslösen.
Dann rödelt er in den Menümessagesystem.
Meist wird eine Speicherschutzverletzung, manchmal auch ein EInvalidCast angezeigt.
Der Fehler selbst tritt in System.pas immer an der selben Stelle auf.

Delphi-Quellcode:
procedure GetDynaMethod;
{       function        GetDynaMethod(vmt: TClass; selector: Smallint) : Pointer;       }
asm
        { ->    EAX     vmt of class            }
        {       SI      dynamic method index    }
        { <-    ESI pointer to routine  }
        {       ZF = 0 if found         }
        {       trashes: EAX, ECX               }

        PUSH EDI
        XCHG EAX,ESI
        JMP @@haveVMT
@@outerLoop:
        MOV ESI,[ESI]
@@haveVMT:
        MOV EDI,[ESI].vmtDynamicTable
        TEST EDI,EDI
        JE @@parent
        MOVZX ECX,word ptr [EDI] <------ Fehlerstelle
Application.Processmessages in try except Block bringt nichts.

Hat wer eine Idee wo man noch suchen kann?
Für einen Tip dankbar.

Gruß
Peter
Miniaturansicht angehängter Grafiken
fehler_464.gif  
  Mit Zitat antworten Zitat