Einzelnen Beitrag anzeigen

berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#1

Exception _vor_ dem Starten meines Programmes

  Alt 5. Sep 2007, 16:26
Hi!

Ich ziehe die Probleme mal wieder magisch an...

Neuerdings kommt schon vor der ersten Zeile meines Programmes eine Exception, und zwar beim Initialisieren der Units (Unit System, Prozedur InitUnits, siehe unten).

Ich habe in all meinen Units mit 'initialization' einen Haltpunkt in die erste Zeile nach selbingen gesetzt, aber die Exception kommt noch bevor der erste Haltpunkt erreicht wird. Ggf. also eine Exception in einer Fremdunit. Die Frage ist nun: welche Unit verursacht das Problem? Insgesamt (laut der Variable "Count", s.u.) werden ~486 Units geprüft, ob sie initialisiert werden müssen.

Erschwerend kommt hinzu, dass Delphi (weil ich es wohl mal aus versehen angehakt habe) bis eben nicht bei einer AccessViolation angehalten hat; somit kann ich weder sagen, seit wann ich das Problem tatsächlich habe (bisher wurde ja einfach nur keine Fehlermeldung angezeigt), noch welche Unit in diesem Zeitraum neu dazu gekommen sein könnte.

Kann man von dem Pointer auf die Unit auf den Unitnamen schließen? Was kann ich tun? *help*

Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt bla.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Access violation at address 00520424 in module 'bla.exe'. Read of address 0000E3BD' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Delphi-Quellcode:
procedure InitUnits;
unit System;
// ...
var
  Count, I: Integer;
  Table: PUnitEntryTable;
  P: Pointer;
begin
  if InitContext.InitTable = nil then
    exit;
  Count := InitContext.InitTable^.UnitCount;
  I := 0;
  Table := InitContext.InitTable^.UnitInfo;
{$IFDEF LINUX}
  Inc(Cardinal(Table), InitContext.Module^.GOT);
{$ENDIF}
  try
    while I < Count do
    begin // <-- hier Exception ----------------------------
      P := Table^[I].Init;
      Inc(I);
      InitContext.InitCount := I;
      if Assigned(P) then
      begin
{$IFDEF LINUX}
        CallProc(P, InitContext.Module^.GOT);
{$ENDIF}
{$IFDEF MSWINDOWS}
        TProc(P)();
{$ENDIF}
      end;
    end;
  except
    FinalizeUnits;
    raise;
  end;
end;
  Mit Zitat antworten Zitat