Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Nicht lokalisierbare Exception (https://www.delphipraxis.net/155298-nicht-lokalisierbare-exception.html)

himitsu 17. Okt 2010 11:43

Delphi-Version: 2010

Nicht lokalisierbare Exception
 
Moin, ich hab grad ein Problem, welches ich einfach nicht nachvollziehen kann.

Wenn ich Zeile für Zeile Debugge, dann tritt kein Fehler auf, aber wenn ich das Programm einfach nur via F9 Starte, dann läuft das Programm manchmal in eine Exception.
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt HID.exe ist eine Exception der Klasse EListError mit der Meldung 'Objekt mit Index 0 konnte nicht gesetzt werden' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Und zwar irgendwo in
Delphi-Quellcode:
Application.CreateForm(TForm1, Form1);
Dachte erst es liegt am OnCreate, aber da kommt das Programm noch garnicht vorbei.

Auf der Form liegt auch nur ein PageControl, 'nen Memo und ein paar Labels und Edits.
Delphi-Quellcode:
TForm1 = Class(TForm)
  PageControl1: TPageControl;
    TabSheet1: TTabSheet;
      Label1: TLabel; Edit1: TEdit;
      Label2: TLabel; Edit2: TEdit;
      Label3: TLabel; Edit3: TEdit;
      Label4: TLabel; Edit4: TEdit; Label5: TLabel;
      Memo1: TMemo;
  Procedure FormCreate(Sender: TObject);
  Procedure FormDestroy(Sender: TObject);
Private
  HIDControler: THIDControler;
  Procedure HIDDeviceChange(Controler: THIDControler);
  Procedure HIDDeviceArrival(Controler: THIDControler; Const Device: THIDDeviceInfo);
  Procedure HIDDeviceRemoval(Controler: THIDControler; Const Device: THIDDeviceInfo; DeviceObject: THIDDevice);
  Procedure HIDDeviceData(Device: THIDDevice; Const Data; Len: Integer; DoRecive: Boolean);
  Procedure HIDOnRecive(Sender: THIDDevice; Const Data; Len: Integer);
End;
Die Methoden und der HIDControler sind irrelevant, da sie zu diesem Zeitpunkt noch nicht erstellt und auch nie aufgerufen wurden.
Zitat:

:7c812afb kernel32.RaiseException + 0x52
:0045e5e2 TabControlError + $16
:0043251e TStrings.InsertObject + $26
:004607ba TPageControl.InsertTab + $3E
:0045fe23 TTabSheet.SetTabShowing + $23
:00436156 TReader.ReadDataInner + $8E
:004360c4 TReader.ReadData + $6C
:0043c162 TComponent.ReadState + $6
:00435f3a TReader.ReadComponent + $122
:00436156 TReader.ReadDataInner + $8E
:00436095 TReader.ReadData + $3D
:0043c162 TComponent.ReadState + $6
:004a034e TCustomForm.ReadState + $72
:00437032 TReader.ReadRootComponent + $1DA
:00433b1f TStream.ReadComponent + $37
:0042fa3c InternalReadComponentRes + $5C
:0042fbac InitComponent + $64
:0042fc3a InitInheritedComponent + $66
:0049fbbf TCustomForm.Create + $CB
:004aa4a9 TApplication.CreateForm + $79
HID.HID
:7c817077 kernel32.RegisterWaitForInputIdle + 0x49
Die Exception tritt auch nicht immer auf.
Ohne am Programm was zu ändern, brauchte ich grad bestimmt 20 Versuche umd endlich an die Exception und somit den Aufrufstack zu gelangen.
Bevor ich hier Anfing dieses hier zu schreiben, ist diese Exception bestimmt 20-30 Mal hintereinander aufgetaucht und alles ohne irgendwelche Veränderungen an der Binary.

Diese Exception muß also irgendwo aus der VCL kommen und irgendwelches Debuggen ist bisher absolut zwecklos gewesen :cry:

Delphi 2010 + XP

[edit]
Wo ich grade Daniels Fehlerthread lese ...
ja, hier auf dem Rechner ist auch Logitechzeugs installiert. :?

toms 17. Okt 2010 11:45

AW: Nicht lokalisierbare Exception
 
Schon mal madExcept probiert?

himitsu 17. Okt 2010 11:53

AW: Nicht lokalisierbare Exception
 
Wie gesagt ... jegliche Debuggingversuche versagen.

Wenn MadExcept eingebunden ist, tritt bisher keine Exception auf.
MadExcept raus und nach 2-3 Versuchen hatte ich wieder Eine.

Namenloser 17. Okt 2010 16:05

AW: Nicht lokalisierbare Exception
 
Ich hatte mal ähnlich komische, nicht lokalisierbare Exceptions als ich im Quellcode eine String-Konstante hatte, die Steuerzeichen enthielt (#0 war wahrscheinlich der Auslöser). Manchmal funktionierte es per Zufall, wenn ich irgendwo eine Kleinigkeit am Code änderte und neu kompilierte, manchmal auch nicht. Also ähnliche Symptome wie bei dir.

Ist natürlich ein totaler Schuss ins Blaue...

himitsu 17. Okt 2010 16:50

AW: Nicht lokalisierbare Exception
 
Mein erstes Programm, wo ich mal einen TFrame verwende und dann passiert gleich sowas ... da freut man sich gleich mal auf den nächsten Versuch.

turboPASCAL 17. Okt 2010 16:57

AW: Nicht lokalisierbare Exception
 
Du hast sicher schon nach den Compilerschaltern für den Überlauf usw. geschaut...

Irgend was muss MadExcept machen was du nicht machst. ;)

Satty67 17. Okt 2010 17:12

AW: Nicht lokalisierbare Exception
 
Ein weiteres TabSheet (also mind. zwei für das PageControl) beseitigt den zufälligen Fehler?

***
Mögliche Fehlerquelle, Ursache ist aber nicht sichtbar. Evtl. Tabs interne Listen noch nicht vollständig initialisiert zum Zeitpunkt des InsertObjekt.
Delphi-Quellcode:
{ComCtrls}
procedure TPageControl.InsertTab(Page: TTabSheet);
begin
  Tabs.InsertObject(Page.TabIndex, Page.Caption, Page);
  UpdateActivePage;
end;
Tabs ist ein TStrings.

himitsu 17. Okt 2010 18:17

AW: Nicht lokalisierbare Exception
 
Wie gesagt, vom eigenen Code wurde zu diesem Zeitpunkt noch garnichts ausgeführt.

Es kann auch nur Zufall sen, daß zusammen mit madExcept keine Probleme auftreten ... schließlich tritt dieser Fehler eben nicht immer auf.
Allerdings gräbt sich dieses madExcept extremst in die anwendungen und in die IDE ein, so daß ich diese nicht gerne dauerhaft eingebaut haben möchte.

Der erste eigene Code liegt im OnCreate der Form und die Exception tritt schon vorher auf.
Ansonsten gibt es nur ein paat Komponenten auf der Form, Ein PageControl, mit einem Tab (bei diesem wurde nur die Caption geändert) und dann liegen nur noch ein Memo (.Anchors geändert, akBottom=True) und einige Edits (.Text in '' geändert), sowie Labels (.Caption nur mit Buchstaben und Leerzeichen) auf dem Tab.
Dann gibt es nur noch in der Form ein OnCreate und OnDestroy, welche bis zur Exception nicht ausgeführt werden.
Es gibt noch eine eigene Unit, wo aber nur etwas in Finalization freigegeben wird. Der Rest würde erst über Form1.OnCreate initialisiert.

Also, wie gesagt, abgesehn von einer billigen zusammengeklicken VCL-Form kann von mir nichts an der Exception Schuld sein.
Und die Projektoptionen sind noch unveränder ursprünglich.

Eigenartig ist auch, daß trotz Änderung die Exception nicht immer auftritt.
Hab auch grad nochmal nachgesehn, es sind alle Hook-DLLs von Logitech blockiert und nichts davon ist in diesem Prozess injeziert.

Angel4585 17. Okt 2010 18:30

AW: Nicht lokalisierbare Exception
 
Bist du das da? Embarcadingsda
Scheinbar ein ähnlicher Fehler.

Was genau wird da eigentlich als Tab hinzugefügt?
ist bei der Komponente evtl en Fehler? Wenn es ein frame ist, das hat evtl ja auch ein OnCreate

Satty67 17. Okt 2010 18:32

AW: Nicht lokalisierbare Exception
 
Ich meine jetzt mehr das es ein "Delay" Fehler sein könnte. Also nicht in deinem Code, sondern in dem von Delphi.

Also TStrings importiert ja ein Strings Interface, und beim Anlegen des TabSheets im PageControl wird sofort auf die Objektlisten zugegriffen. Beim Debug-Stepping würde so ein zeitkritischer Fehler ja nie auftreten.

Assarbad 17. Okt 2010 18:45

AW: Nicht lokalisierbare Exception
 
Heisenbugs sind üblicherweise auf einen korrupten Heap zurückzuführen. Speichermanager austauschen und nochmal probieren.

himitsu 17. Okt 2010 18:52

AW: Nicht lokalisierbare Exception
 
Nee, bin ich nicht und abgesehn von der ImageList klingt es schon gleich. :shock:

Das Programm, wo es bei mir auftritt ist die HID.dpr
http://www.delphipraxis.net/155160-wiimote-pc.html

- selbst wenn aller eigener Code nicht aufgerufen wird (alles in OnCreate/OnDestroy auskommentiert), dann tritt der Fehler dennoch abunzu auf

Luckie 17. Okt 2010 23:30

AW: Nicht lokalisierbare Exception
 
Zitat:

Zitat von Assarbad (Beitrag 1056224)
Heisenbugs

Der ist gut, den muss ich mir merken. :mrgreen:

Assarbad 17. Okt 2010 23:39

AW: Nicht lokalisierbare Exception
 
Zitat:

Zitat von Luckie (Beitrag 1056257)
Zitat:

Zitat von Assarbad (Beitrag 1056224)
Heisenbugs

Der ist gut, den muss ich mir merken. :mrgreen:

Ist nicht von mir, sondern wird allgemein benutzt, siehe hier.

Luckie 18. Okt 2010 00:44

AW: Nicht lokalisierbare Exception
 
Noch nie von gehört, aber interessant.

himitsu 18. Okt 2010 02:04

AW: Nicht lokalisierbare Exception
 
Joar, diese Beschreibung zeigte mir Google auch auf.
http://www.uni-protokolle.de/Lexikon/Heisenbug.html
Kannte es vorher ebenfalls nicht.

Schön ist aber, daß ich praktisch nur 'ne "kleine" VCL-Form zusammengeklickt hab und diese schon Fehler aufzeigt ... das kann doch nicht sein. (hätte ich Geld, dann würde ich mir wohl doch langsam mal das Bugfix Namens XE kaufen :? )

Dezipaitor 18. Okt 2010 23:40

AW: Nicht lokalisierbare Exception
 
Hehe, so einen Heisenbergbug hatte ich auch mal. Hab dann Data gefragt und das/der hatte mir dann den Heisenberg-Kompensator gezeigt und seitdem hatte ich kein Problem mehr. Nur finde ich den nicht mehr :roll:

Aber ich hab mich immer gefragt, warum Optimierung in Debug von Delphi aktiv war...nu weiß ich es.

ChrisE 19. Okt 2010 06:10

AW: Nicht lokalisierbare Exception
 
Hallo,

hast du schon mal probiert die Create-Methode bzw. die CreateNew und AfterConstruction zu überschreiben und per LOG-File (Low-Level-Debugging ;-) ) fest zu stellen wann der Fehler auftritt?

Ich meine das verhalten wieder zu erkennen. Es war damals nach neubau des Formulars nicht mehr zu reproduzieren. Ich bin seinerzeit von einem Fehler beim Parsing der DFM ausgegangen.
Einen ähnlichen Fehler hatte ich auch schon mal, da hat schlicht das
Delphi-Quellcode:
Application.Initialize;
als erste Zeile in der DPR gefehlt und hat für die wildesten Fehler gesorgt.

Gruß, Chris

OldGrumpy 20. Okt 2010 10:22

AW: Nicht lokalisierbare Exception
 
Seit gestern habe ich diesen seltsamen Fehler auch auf dem Tisch, allerdings als Bugreport von einem User. Compiler ist in diesem Falle BDS2006, allerdings ist die Version beim User schon längere Zeit in Benutzung und die Fehlermeldung ist neu. Irgendwie kann ich mich der Vermutung nicht erwehren, dass Microsoft vielleicht mit einem der letzten Windows Updates irgendwas geändert hat was sich da negativ auswirkt...

@Himitsu, wie lange beobachtest Du das Problem jetzt schon?

himitsu 20. Okt 2010 10:29

AW: Nicht lokalisierbare Exception
 
Und dabei ist in Delphi das
Delphi-Quellcode:
Application.Initialize;
nur eine leere (Dummy)Methode. :stupid:
(es sollte also egal sein, ob es da ist oder nicht)

Also, ich hab das jetzt seit 1-1,5 Wochen und kannte es vorher noch nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:02 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