Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Programm soll merken, dass es beim Debuggen geschlossen wird (https://www.delphipraxis.net/81639-programm-soll-merken-dass-es-beim-debuggen-geschlossen-wird.html)

RavenIV 30. Nov 2006 15:34


Programm soll merken, dass es beim Debuggen geschlossen wird
 
Hallo zusammen,

nachdem ich etliche Male die Suche mit verschiedenen Begriffen gequält habe, sind mir dann die Ideen ausgegangen, nach was ich zu diesem Problem noch suchen könnte.

Ich will das Problem mal kurz beschreiben:
Ich bin am debuggen meines Programmes.
Bei Programmende sollen noch einige Aktionen ausgeführt werden, z.B. serielle Schnittstellen sauber schliessen, vorher einige Befehle an die angeschlossenen Geräte schicken, usw.
Wenn ich auf das "Kreuzchen" oder den "Schliessen"-Button oder <ALT>+<F4>drücke, wird Form.Close ausgeführt und alles ist gut.
Wenn ich das Programm jedoch mit <STRG>+<F2> oder mit "Programm zurücksetzen" im IDE-Menu beende, wird Form.Close und auch Form.Destroy nicht aufgerufen.
Es ist aber wichtig, dass die an der seriellen Schnittstelle angeschlossenen Geräte immer sauber getrennt werden.

Wie kann ich das schaffen, dass mein Programm auch beim Beenden im Debugger noch einige Aktionen ausführt?

gruessle

Sascha L 30. Nov 2006 15:39

Re: Programm soll merken, dass es beim Debuggen geschlossen
 
ich glaube gar nicht, da das Programm (der Prozess) dann hart gekillt wird.

RavenIV 30. Nov 2006 15:42

Re: Programm soll merken, dass es beim Debuggen geschlossen
 
Das wäre dann aber nicht schön. :-(

Und es wird keine Message mehr geschickt?
Oder sonst irgendwie benachrichtigt?

SirThornberry 30. Nov 2006 15:48

Re: Programm soll merken, dass es beim Debuggen geschlossen
 
nen, es wird rein gar nix mehr gesendet. Es ist mindestens genau so schlimm als würdest du ein programm über den Taskmanager hart beenden (Prozess beenden)

Light 30. Nov 2006 16:34

Re: Programm soll merken, dass es beim Debuggen geschlossen
 
Ich schätze du hast da wenig Chancen.

Es gäbe eine -zwar Umständliche aber wenigstens überhaupt eine- Lösung:
Du schriebst ein Programm was Di Eigentliche Schnittstellen Kommunikation ausführt und steuerst das dann per deinem eigentlichen Programm und falls dein Hauptprogramm nicht mehr da sein sollte oder so dann beendet das andere Programm die Verbindungen und schließt sich dann auch .
Dann könnte man das immer vom Hauptprogramm aus ausführen....

Leuchtende Grüße

Stefan
alias Light

Bernhard Geyer 30. Nov 2006 16:48

Re: Programm soll merken, dass es beim Debuggen geschlossen
 
Zitat:

Zitat von RavenIV
Es ist aber wichtig, dass die an der seriellen Schnittstelle angeschlossenen Geräte immer sauber getrennt werden.

Wie kann ich das schaffen, dass mein Programm auch beim Beenden im Debugger noch einige Aktionen ausführt?

Wie schon die vorredner geschrieben haben: Das geht nicht. Was würden wohl Viren machen wenn Sie beim Abschießen durch den Virenscanner oder dem User das mitbekommen würden? "Intelligentere" Viren/Würmer/... haben oft einen "Überwachungsprozess".

Was passiert mit den Geräten wenn sowas passiert? Stehen diese "im Wald"? Was ist wenn physikalisch die Verbindung getrennt wird. Da kannst du auch kein "saubere" Trennung durchführen.

RavenIV 30. Nov 2006 17:00

Re: Programm soll merken, dass es beim Debuggen geschlossen
 
Zitat:

Zitat von Bernhard Geyer
Was passiert mit den Geräten wenn sowas passiert? Stehen diese "im Wald"? Was ist wenn physikalisch die Verbindung getrennt wird. Da kannst du auch kein "saubere" Trennung durchführen.

so ungefähr sieht es aus.
Ich muss halt ein Init machen, das verhältnismässig viel Zeit in Anspruch nimmt.
Das Init könnte ich mir dann sparen.

Gewohnheitsmässig drückt man halt <STRG><F2>, wenn das Ergebnis beim Debuggen nicht so ist wie erwartet. Wenn man's dann gedrückt hat, könnte man sich in den Arsch beissen. ;-)

SirThornberry 30. Nov 2006 17:02

Re: Programm soll merken, dass es beim Debuggen geschlossen
 
Ich denke es wird nur die Variante von Light übrig bleiben.

hanspeter 30. Nov 2006 17:54

Re: Programm soll merken, dass es beim Debuggen geschlossen
 
Geht nicht.
Ich bin ja schon froh, wenn Delphi sich nach Beenden im Debugger nicht aufhängt.
Passiert mir regelmäßig im Zusammenhang mit einem Com-Server.
Delphi lässt sich auch ohne Speicherschutzverletzung nicht mehr schließen.
In ein von drei Fällen muß ich dann den Rechner neu starten.
Setze doch das Programm fort und baue irgendwo einen Abbruchschalter ein, welcher das Programm terminiert.

Gruß Peter

RavenIV 1. Dez 2006 07:21

Re: Programm soll merken, dass es beim Debuggen geschlossen
 
Zitat:

Zitat von hanspeter
Setze doch das Programm fort und baue irgendwo einen Abbruchschalter ein, welcher das Programm terminiert.
Gruß Peter

Den Button "Schliessen" habe ich schon.
Aber nicht immer denke ich daran, dass ich diesen auch drücken muss.
Manchmal bleibt das Programm auch sonst wo hängen und ich erreiche den Button garnicht.

Bernhard Geyer 1. Dez 2006 08:51

Re: Programm soll merken, dass es beim Debuggen geschlossen
 
Zitat:

Zitat von hanspeter
Ich bin ja schon froh, wenn Delphi sich nach Beenden im Debugger nicht aufhängt.
Passiert mir regelmäßig im Zusammenhang mit einem Com-Server.
Delphi lässt sich auch ohne Speicherschutzverletzung nicht mehr schließen.
In ein von drei Fällen muß ich dann den Rechner neu starten.

Unter welchem Konto wird dann der COM-Server ausgeführt? Wenn es unterschiedliche Konten Delphi<->COM-Server sind dann könnte ich mir sowas vorstellen.

Und was willst Du denn überhaupt Debuggen? Ich würde die serielle Kommunikation in eine Komponente packen und das Protokoll darüber abarbeiten. Anchließend gibt es ein Testprogramm mit der man die serielle Kommunikation Testen + verbessern kann. Der COM-Server verwendet diese Komponente und kann damit auf einen halbwegs getestete Code aufsetzen. Ebenfalls würde ich mir eine Dummy-Komponente schreiben, welche das gleiche Interface hat wie die "richtige" Serielle-Kommunikationskomponente. Diese wird dann für Testzwecke im COM-Server instanziiert um Fehlerfälle gezielt zu provozieren um den COM-Server und die Kommunikation zum Client zu testen.

Ist zwar nicht gerade wenig Arbeit, aber wenn du eh genügend Zeit mit Booten verbringst wäre da mehr als zu überlegen. Zu fragen ob es denn ein COM-Komponente sein muss erspar ich mir mal ...

hanspeter 4. Dez 2006 10:56

Re: Programm soll merken, dass es beim Debuggen geschlossen
 
Der Com-Server wird aus dem Delphi Programm heraus gestartet und auch wieder beendet.
Ist selber auch in Delphi geschrieben und überflüssig wie ein Kropf.
er stellt eigentlich nur einen zeitintensiven Wrapper für SQL Abfragen an eine Firebird Datenbank dar.
Kann ich aber nichts machen. Ist zwingend vorgegeben.
Der Debugger scheint von dem Comserver nichts mitzubekommen.
Beende ich das Delphiprogramm im Debugger dann bleibt der Com Server gestartet.
Beim nächsten Programmstart bringt er dann einen "schweren OLE Fehler".

Gruß Peter

himitsu 4. Dez 2006 16:14

Re: Programm soll merken, dass es beim Debuggen geschlossen
 
Andere durch das Programm gestartete Programme werden von Debuger nicht überwacht ... hast du ja schon mitbekommen, es wird nur das Programm und die in den Prozeß eingebundenen DLLs, o.Ä. behandelt.


Aber wenn der COM-Server von dir ist, dann kannst du doch dort eine Überwachung einbauen, die ihn dann abstellt, wenn er durch irgendwas vom Programm getrennt wurde.

hanspeter 5. Dez 2006 07:13

Re: Programm soll merken, dass es beim Debuggen geschlossen
 
Zitat:

Zitat von himitsu
Andere durch das Programm gestartete Programme werden von Debuger nicht überwacht ... hast du ja schon mitbekommen, es wird nur das Programm und die in den Prozeß eingebundenen DLLs, o.Ä. behandelt.


Aber wenn der COM-Server von dir ist, dann kannst du doch dort eine Überwachung einbauen, die ihn dann abstellt, wenn er durch irgendwas vom Programm getrennt wurde.

Weis ich doch.
Es ging um die Frage im Ausgangsthread ob der Debugger beim Beenden noch irgendein Stück
Programm abarbeiten könnte.
Comserver ist nicht von mir und so viel will ich auch nicht mehr ändern, da Delphi bei uns ein
Auslaufmodell ist.

Gruß
Peter

himitsu 6. Dez 2006 12:01

Re: Programm soll merken, dass es beim Debuggen geschlossen
 
Tja, das schein mir aber der einzige Weg, denn wie schon gesagt wurde .. F2 ist sowas wie das hate Beenden über'n Taskmanager und da ist es ja "mit Absicht" so, daß das Programm davon nichts mitbekommt.

Also entweder du änderst den COM-Server, schaltest ein weiteres Programm zwischen beides, was dann diese Aufgabe übernehmen kann, oder ebenfalls en weiteres Programm, welches den Rechner überwacht und nach COM-Servern sucht, welche einsam und nicht ordnungsgemäß rumgammeln.


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