Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi EOSError 1400 - Invalid window handle (https://www.delphipraxis.net/191812-eoserror-1400-invalid-window-handle.html)

A.Griffin 22. Feb 2017 15:55

EOSError 1400 - Invalid window handle
 
Könnte mir jemand vielleicht behilflich sein und mir erklären wie ich den oben genannten Fehler debuggen könnte? Der Fehler tritt beim Beenden der Anwendung auf. Ich habe versucht mit Breakpoints gerauszufinden, wo genau der Fehler auftritt, aber der Fehler tritt leider nach oder im "end;" auf. Für jeden Hinweis wäre ich dankbar. Ich habe den ganzen Tag schon probiert herauszufinden wodurch der Fehler ausgelöst wird.


Delphi 7 Anwendung auf einem Windows 7 Rechner.

TiGü 22. Feb 2017 16:55

AW: EOSError 1400 - Invalid window handle
 
Ist ein Thread neben dem MainThread im Spiel? Hast du eine Console offen?

nahpets 22. Feb 2017 17:09

AW: EOSError 1400 - Invalid window handle
 
Angenommen, Du hast in Deinem Programm irgendwo eine Ereignisroutiene dieser Art:
Delphi-Quellcode:
procedure Tform1.btnProgrammbeenden(Sender: TObject);
begin
  stb.SimpleText := 'Das Programm wird beendet ...';
  Application.ProcessMessages;
  Close;
end;
Dann einen Breakpoint auf das Close setzen und dann mit dem Debugger schrittweise (F7) bis zum Fehler weitersteppen.

Das CPU-Fenster vorher aufmachen und dort schauen, was bei jedem Schritt so gemacht wird. Daraus solltest Du dann eventuell Rückschlüsse auf die Fehlerursache ziehen können.

Oder das Programm mit ausführlicher MAP-Datei erstellen und dort die Fehleradresse aus der Fehlermeldung suchen. Eventuell findest Du dort dann brauchbare Informationen.

Nutzt Du zufällig die JVCL?

Wenn ja, papp Dir die Komponente TJvDebugHandler auf's Formular, gibt dort einen Namen für die Logdatei ein und erstelle Dein Programm mit ausfühlicher MAP-Datei.

Im Fehlerfalle sollte dann sowas in der Art in der LOG-Datei stehen:
Code:
22.02.2017 18:02:43 Exception EDivByZero occured in TForm1.FormCreate at 29 in file Unit1.pas
Message: Division durch Null
Call stack:
[581E1048] Unit1.TForm1.FormCreate (Line 29, "Unit1.pas")
[581BE2C1] Forms.TCustomForm.DoCreate (Line 2648, "Forms.pas")
[581BDFA1] Forms.TCustomForm.AfterConstruction (Line 2575, "Forms.pas")
[581C5661] Forms.TApplication.CreateForm (Line 6947, "Forms.pas")
[581E1413] Project1.Project1 (Line 11, "E:\Delphi\Project1.dpr")
Analog dazu solltest Du dann bei Deinem Programm einen Hinweis auf die fehlerverursachende Stelle bekommen.

A.Griffin 22. Feb 2017 18:04

AW: EOSError 1400 - Invalid window handle
 
Zitat:

Zitat von TiGü (Beitrag 1362349)
Ist ein Thread neben dem MainThread im Spiel? Hast du eine Console offen?

Es sind mehrere Threads mit dabei. Es wird keine Console genutzt.

@nahpets, JVCL wird nicht genutzt. Kannst du eine gute Anleitung für MAP files empfehlen?

nahpets 22. Feb 2017 18:55

AW: EOSError 1400 - Invalid window handle
 
Nö, 'ne Anleitung hab' ich nicht.

MAP-Dateien sind auch nur Textdateien. In die kann man mit Notepad (oder so) reinschauen.

Wenn Du aus der Fehlermeldung eine Fehleradresse hast, kannst Du die da einfach suchen. Mit ein bisserl Glück findest Du sie. Im Idealfall steht daneben dann eine Zeilennummer. Oberhalb des Abschnittes, in dem Du fündig geworden bist, steht die zugehörige Quelltextdatei.

Findest Du die Adresse nicht, so nimm nur die ersten sechs Zeichen davon und suche nochmal. Wirst Du fündig, so kannst Du dort wieder Zeilennummer und Quelltextdatei entnehmen und weiß zumindest, dass der Fehler irgendwo ab dieser Stelle auftritt. Dann setzt Du Dir dort 'nen Breakpoint und gehst mit dem Debugger ab da schrittweise weiter, bis der Fehler auftritt.

Klappt es mit den ersten sechs Zeichen nicht, dann halt mit 5, 4, 3 Zeichen versuchen, eine Annäherung an die Fehlerstelle sollte somit eigentlich möglich sein.

Aviator 23. Feb 2017 10:50

AW: EOSError 1400 - Invalid window handle
 
Kannst du, wenn du den Debugger gestartet hast und der Fehler passiert, nicht einfach auf Anhalten klicken und dir den StackTrace anschauen? Sollte doch eigentlich funktionieren.

Alternativ wie von Stephan empfohlen den Breakpoint auf das Close setzen und ab dort mit F7 durchsteppen. Allerdings hatte ich dann schon öfters das Problem, dass der Fehler dann nicht mehr auftrat weil dann andere Laufzeiten der Threads bestehen und evtl. der Fehler nicht entsteht weil alles noch sauber abgearbeitet werden kann.

A.Griffin 23. Feb 2017 12:58

AW: EOSError 1400 - Invalid window handle
 
Zitat:

Zitat von Aviator (Beitrag 1362395)
Kannst du, wenn du den Debugger gestartet hast und der Fehler passiert, nicht einfach auf Anhalten klicken und dir den StackTrace anschauen? Sollte doch eigentlich funktionieren.

Alternativ wie von Stephan empfohlen den Breakpoint auf das Close setzen und ab dort mit F7 durchsteppen. Allerdings hatte ich dann schon öfters das Problem, dass der Fehler dann nicht mehr auftrat weil dann andere Laufzeiten der Threads bestehen und evtl. der Fehler nicht entsteht weil alles noch sauber abgearbeitet werden kann.

Meinst du mit StackTrace "Call Stack" unter "Debug Windows"? Mit F7 steppen komme ich nicht weiter, da laut dem Steppen im CPU Window im Ausführen des "end;" der Fehler entsteht. Laut der map file ist die Speicheradresse des Fehlers zwischen BackupVarBStrFromCy und BackupVarBStrFromDate, aber was das mir sagt weiß ich leider nicht.

nahpets 23. Feb 2017 13:25

AW: EOSError 1400 - Invalid window handle
 
Bei Delphi 7 sind die beiden Methoden in der VarUtils.pas zu finden (steht unter Delphiverzeichnis\Source\Rtl\Sys).

Also die Unit ins Projekt aufnehmen und Breakpoint auf die erste Zeile der Methode.

Vermute, dass dort vorab im Programm veränderte Systemeinstellungen (bezüglich Währung und Datum) restauriert werden sollen.

Änderst Du eventuell im Programm irgendwelche Einstellungen dieser Art?

Wenn ja, kommentiere die mal bitte testweise aus und prüfe, ob damit auch der Fehler behoben wird.
Dann ist die Ursache in dem Bereich zu suchen.

A.Griffin 23. Feb 2017 13:48

AW: EOSError 1400 - Invalid window handle
 
Die beiden Methoden werden im Projekt nicht genutzt.

nahpets 23. Feb 2017 14:00

AW: EOSError 1400 - Invalid window handle
 
Wäre es möglich, dass Du uns mal die Fehlermeldung postest (per Strg-C im Fehlerdialog kopieren und hier zwischen CODE-Tags einfügen) und die MAP-Datei als Anhang beifügst?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:16 Uhr.
Seite 1 von 2  1 2      

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