Autor Beitrag
jojo-sp
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 317

Windows XP Prof, Vista Ultimate & Home Premium, Windows 7
Delphi 7 Enterprise, Delphi 2009
BeitragVerfasst: Di 03.11.09 13:06 
Hallo,

ich habe ein Programm, dass sich ständig selber schließt, ohne dass ich herausfinde wieso.
Das passiert wenn man damit arbeitet, aber auch wenn es gar nicht benutzt wird.
Der Prozess ist auch fein säuberlich weg.
Das Programm greift auf einen MSSQL 2005 Express DB-Server zu und kommuniziert über die Socket mit einem Client.

Folgendes habe ich bereits probiert bzw. untersucht:
SQL-Server auf Deadlocks überprüft, wenn eine sp ausgeführt wird => Nichts
Bugreport => keine Meldung
Im OnCloseQuery Abfrage, ob das Programm wirklich geschlossen werden soll. => Nichts, beendet sich trotzdem
Im OnCloseQuery Speichern einer Log Datei, ob u.U. von Windows eine Meldung zum Terminieren kam. => Nichts
Hardware getauscht => Nichts
Komplett blankes Betriebssystem neu aufgesetzt. (XP SP3) => Nichts

Langsam weiß ich nicht mehr, wonach ich suchen soll, da es nur sporadisch auftritt und sich nicht reproduzieren lässt.
Ich befürchte, dass es möglicherweise bei winsock.send auftritt, da Anfangs das Programm beim Senden eingefroren war, was jetzt aber nicht mehr auftritt...

Wäre für jede Idee dankbar!!!

Gruß Johannes

_________________
Ist der Ruf erst ruiniert, lebts sich gänzlich ungeniert...
Wilhelm Busch (1832 - 1908)
Critter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 328
Erhaltene Danke: 3

Windows 7
Delphi 7 Pro.
BeitragVerfasst: Di 03.11.09 13:25 
Hallo,

tritt das Problem auch auf, wenn du es aus der Delphi-IDE aufrufst? Wenn ja, könntest du einen Brakepoint im der OnClose Ereignis setzen, und sobald dort gestoppt wird, versuchen über den Aufruf-Stack nachzuvollziehen, wo der Abbruch herkommt. Lässt du Delphi bei Exceptions stoppen? Nein, das könnte in diesem Fall hilfreich sein ;).
Nutzt du Timer? Threads? Reagierst du auf Triger aus der DB? Das währen so die Punkte, an denen ich genauer hinschauen würde.

critter

_________________
Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
jojo-sp Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 317

Windows XP Prof, Vista Ultimate & Home Premium, Windows 7
Delphi 7 Enterprise, Delphi 2009
BeitragVerfasst: Di 03.11.09 14:59 
Hi Critter,

schonmal sehen 4 Augen mehr als 2 :-)

Trigger kann ich ausschließen, da ich keine verwende.
Den Timer den ich benutze hatte ich bereits deaktiviert.
Stop bei Exceptions ist an.
Aber ich werde glaube ich mal einen Dauertest direkt aus dem Debugger machen. Bis jetzt ist das Problem aber immer nur beim Produktiveinsatz aufgetreten. Dabei hat es vorher einen Dauertest ohne Fehler auf den Rechnern gegeben. Das Programm ist aber jetzt immer fein säuberlich weg und durchläuft dabei nicht OnClose, OnCloseQuery, OnDestroy des MainForms.
Hoffentlich reagiert er im Debugger dann im OnClose, aber ich kann leider auch nicht 1:1 den Produktiveinsatz simulieren.

Mal schauen was noch so kommt...

_________________
Ist der Ruf erst ruiniert, lebts sich gänzlich ungeniert...
Wilhelm Busch (1832 - 1908)
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 03.11.09 22:28 
Arbeitest du mit Threads? Kann zu großen Problemen führen, wenn man nicht aufpasst.

_________________
PROGRAMMER: A device for converting coffee into software.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Mi 04.11.09 10:36 
Ich hatte vor einigen Jahren in einem anderen Projekt auch mal genau solch einen Effekt. Nach Wochen der Suche hatten wir es letzten Endes doch irgendwann gefunden. Eine von uns benutzte Bibliothek zum Datenaustausch hat in gewissen Situationen einen schwerwiegenden Fehler festgestellt. Und in diesem Fall hat es dann ein C++ Close aufgerufen. Das ist vergleichbar wie ein Halt in Pascal. Die Folge war. Die Anwendung war einfach so verschwunden. Ohne OnClose. Ohne OnDestroy. Ohne, dass wir dort auch nur ansatzweise etwas dagegen unternehmen könnten. Try Finally etc half alles nichts. Das Einzige was wir dort machen konnten war es die Quellen zu patchen. Und alle Close zu entfernen. Das Close wurde im übrigen aus einer DLL heraus aufgerufen.

Ein Aufruf von Halt sorgt auch dafür, dass OnClose nicht aufgerufen wird. Allerdings sollte OnDestroy noch funktionieren. Ich denke beide Aufrufe laufen im Endeffekt auf die WindowsAPI Funktion ExitProcess hinaus. Wenn die aufgerufen wird funktioniert auch OnDestroy nicht mehr.

Wie du die Stelle findest ist da wohl das Spannenste. Wir sind da eigentlich auch eher nur per Zufall drauf gekommen. Du solltest aber deine Logausgaben so umstellen, dass du nicht erst am Ende ein Log schreibst sondern die Meldungen direkt dann auf die Platte schreibst sobald sie eintrudeln. Kann natürlch bei vielen Logausgaben zu einer Laufzeitverlängerung kommen. Aber dann kannst du vielleicht ansatzweise erkennen wo es passiert. Eventuell musst du dann die Ausgaben verfeinern.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.