AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi [Behoben, siehe Beitrag #13] Close; im TTimer lässt Programm manchmal abschmieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Behoben, siehe Beitrag #13] Close; im TTimer lässt Programm manchmal abschmieren

Ein Thema von a.def · begonnen am 24. Nov 2016 · letzter Beitrag vom 24. Nov 2016
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#1

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 13:57
In diesem Fall kann ich den Debugger leider nicht verwenden, da das Programm über ein CMD-Fenster mit Parametern aufgerufen wird.
Dann gib doch diese Parameter in Delphi über "Start - Parameter" im Feld "Parameter" ein, dann geht auch das Debuggen (oder gibt es das in der Starter nicht?).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#2

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 14:07
(oder gibt es das in der Starter nicht?).
Ups da habe ich mich verklickt. Ich habe damals die Professional gekauft als sie runtergesetzt war (auch wenn ich kein Professional bin )

Funktioniert einwandfrei. Nur was mache ich dann danach, wenn eine Exception geworden wurde?
Weil Chinesisch lesen ist schwierig.

Geändert von a.def (24. Nov 2016 um 14:12 Uhr)
  Mit Zitat antworten Zitat
EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#3

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 14:13
Probier doch mal, hinter schreibeLog(1,...) ein Application.ProcessMessages einzufügen.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#4

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 14:14
Werde ich sofort machen und dann gucken was passiert.
Das kann leider von Mal zu Mal etwas dauern bis ich ein Ergebnis habe, da der Fehler recht selten auftaucht.

Ein Application.ProcessMessages; im Timer bringt leider keine Änderung.

Im Debugger steht aktuell immer
Zitat:
00449E2B 3B7308 cmp esi,[ebx+$08]
Manchmal steht der grüne Pfeil auch an "Leave".

Ich habe das Application.ProcessMessages; jetzt mal in den Timer direkt nach begin gesetzt. Mal sehen, ob es etwas ändert.
Ok tut es nicht.

Geändert von a.def (24. Nov 2016 um 14:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.343 Beiträge
 
Delphi 12 Athens
 
#5

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 14:54
Im Debugger starten und schauen wo man landet, wenn die exception geworfen wird.
* siehe Cursorposition/Markierung im Quellcode
* siehe Stacktrace

Und vielleicht vorher einen Haltepunkt auf Close und dann mit F7/F8 weitergucken.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#6

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 15:15
Der Fehler kommt jetzt wieder seltener

Aber er kommt soweit ich das jetzt erst einmal erkennen konnte nur wenn ich Timer1 aktiviere, welche das Programm schließt.

Vom Close kommt der Fehler wohl auch nicht sondern es passiert genau zwischen Ende Timer_Arbeit und If-Eintrittspunkt Timer1
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 15:20
Du hast mit dem Debugger ein mächtiges Werkzeug. Nutze es.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#8

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 15:21
-Warum ist der Post nach dem Bearbeiten hier plötzlich doppelt?-


Zitat:
* siehe Cursorposition/Markierung im Quellcode
* siehe Stacktrace
Die Cursorposition im Code wird beim Werfen einer Exception nicht verändert.

Der Fehler tritt wohl hier auf. Er tritt manchmal auf aber nicht immer:
- Classes.pas
Delphi-Quellcode:
procedure TList.Delete(Index: Integer);
var
  Temp: Pointer;
begin
  if (Index < 0) or (Index >= FCount) then // <==
// ...
Ich werde mal meine Listen überprüfen.

Beim Beenden der Anwendung gibt es aber keine Speicherlecks.


-------------


Ich glaube den Fehler jetzt mit dem Debugger gefunden zu haben.
Ich werde jetzt für etwa eine Stunde Tests durchführen und dann Feierabend machen.
Ich melde mich dann hier im selben Beitrag zurück.


-------------


112 automatisierte Tests am Stück später. Ich denke ich kann sagen, dass der Fehler behoben ist.
Es war nicht das Close-Event und auch kein Timer. Hier wurde ich vom System auf die falsche Spur geschickt.

Es war einfach nur eine TList, aus welcher doppelt Items gelöscht wurden.
Dass das aber in einem APPCRASH resultiert und nicht in einer normalen Exception, war ein bisschen seltsam.

Geändert von a.def (24. Nov 2016 um 17:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 18:08
Es war einfach nur eine TList, aus welcher doppelt Items gelöscht wurden.
Dass das aber in einem APPCRASH resultiert und nicht in einer normalen Exception, war ein bisschen seltsam.
Wie sieht denn deine Fehlerbehandlung an dieser Stelle aus? Wenndu da keine Fehlerbehandlung hast, dann wir die Exception bis ans Betriebssystem hoch gereicht, was letztendlich den Absturz der Anwendung bedeutet.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 14:07
In diesem Fall kann ich den Debugger leider nicht verwenden, da das Programm über ein CMD-Fenster mit Parametern aufgerufen wird.
Dann gib doch diese Parameter in Delphi über "Start - Parameter" im Feld "Parameter" ein, dann geht auch das Debuggen (oder gibt es das in der Starter nicht?).
Die Lösung wollte ich auch gerade vorschlagen. Alternativ kann er ja einfach so machen als ob die Parameter übergeben wurden.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz