![]() |
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 |
Re: Programm soll merken, dass es beim Debuggen geschlossen
ich glaube gar nicht, da das Programm (der Prozess) dann hart gekillt wird.
|
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? |
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)
|
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 |
Re: Programm soll merken, dass es beim Debuggen geschlossen
Zitat:
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. |
Re: Programm soll merken, dass es beim Debuggen geschlossen
Zitat:
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. ;-) |
Re: Programm soll merken, dass es beim Debuggen geschlossen
Ich denke es wird nur die Variante von Light übrig bleiben.
|
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 |
Re: Programm soll merken, dass es beim Debuggen geschlossen
Zitat:
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. |
Re: Programm soll merken, dass es beim Debuggen geschlossen
Zitat:
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 ... |
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 |
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. |
Re: Programm soll merken, dass es beim Debuggen geschlossen
Zitat:
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 |
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