AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Service debuggen - mit Prozess verbinden klappt nicht mehr
Thema durchsuchen
Ansicht
Themen-Optionen

Service debuggen - mit Prozess verbinden klappt nicht mehr

Ein Thema von bwolf · begonnen am 12. Sep 2011 · letzter Beitrag vom 12. Sep 2011
Antwort Antwort
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#1

Service debuggen - mit Prozess verbinden klappt nicht mehr

  Alt 12. Sep 2011, 18:38
Hallo,

ich habe einen Service geschrieben den ich über eine Host-Anwendung immer erfolreich debuggen konnte.
Heute musste ich eine kleine Änderung vornehmen udn es war mir nicht mehr möglich, mich mit dem Prozess zu verbinden (die IDE schmiert nach dem verbinden immer ab).
Ich habe festgestellt, dass, wenn ich keine Äderung am Service vornehme das Verbinden noch funktioniert. Erst wenn ich eine kleine Änderung gemacht habe, klappt es nicht mehr.

Bin für jeden Tipp dankbar!
  Mit Zitat antworten Zitat
grl

Registriert seit: 5. Feb 2007
174 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Service debuggen - mit Prozess verbinden klappt nicht mehr

  Alt 12. Sep 2011, 19:21
Für solche Fälle hab ich mir ein Progrämmchen geklopft, dem ich über WM_COPYDATA Nachrichten schicken kann - damit kann man eigentlich fast immer ein bischen mitloggen was denn grad passiert. Nachteil: Mit Breakpoints und so is dann natürlich essig.

Gruß
Luggi
  Mit Zitat antworten Zitat
arnold mueller

Registriert seit: 27. Jul 2005
129 Beiträge
 
#3

AW: Service debuggen - mit Prozess verbinden klappt nicht mehr

  Alt 12. Sep 2011, 20:01
Für solche Fälle hab ich mir ein Progrämmchen geklopft, dem ich über WM_COPYDATA Nachrichten schicken kann - damit kann man eigentlich fast immer ein bischen mitloggen was denn grad passiert
wohl dem der noch XP einsetzen darf
  Mit Zitat antworten Zitat
arnold mueller

Registriert seit: 27. Jul 2005
129 Beiträge
 
#4

AW: Service debuggen - mit Prozess verbinden klappt nicht mehr

  Alt 12. Sep 2011, 20:07
(die IDE schmiert nach dem verbinden
Fehlermeldung? Friert ein oder wie? Beschreib doch mal was du genau machst. Wenn ich einen Service debuggen will, setze ich im Konstruktor ein Sleep 10 Sekunden und danach einen Haltepunkt. Innerhalb der 10Sekunden verbinde ich mich mit dem Prozess und steh danach auf dem Haltepunkt und kann debuggen.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#5

AW: Service debuggen - mit Prozess verbinden klappt nicht mehr

  Alt 12. Sep 2011, 20:59
Ach ja und die IDE als Admin starten.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Service debuggen - mit Prozess verbinden klappt nicht mehr

  Alt 12. Sep 2011, 23:47
Ich habe mir für solche Fälle, ich nenne es mal ein "Framework" gebastelt, das wie folgt aussieht:

Die eigentliche Logik des Service steht in einem Datenmodul, bzw. weiterer Code usw. kann in weitere Datenmodulen ausgelagert, die vom Haupt-Datenmodul aufgerufen werden. Um das Haupt-Datenmodul herum habe ich zwei Projekte gebastelt, das eine, der eigentliche Dienst, das andere das selbe als ganz normale EXE-Datei.

Was bringt mir das? Ich kann meine Logik unabhängig vom Dienst testen. Als ganz normale EXE debuggen usw. Wenn dort alles funktioniert, dann erzeuge ich mein Projekt "Dienst" komplett neu und kann mir sicher sein, dass es funzt.

Zusätzlich habe ich noch ein einfacher Log-Mechanismus eingebaut, der bei der EXE die Infos in ein Memofeld schreibt, beim Dienst ins Windows Ereignisprotokoll.

Ich habe den ganzen Code mal angehängt.

Folgendes ist noch zu beachten:
Ich benutze das unter XE, in wie weit das unter älteren Version klappt muss selbst probiert werden.

In den Projektoptionen für die Test-EXE ist die Bedingung "xEXE" definiert. Damit binde ich im Datenmodul eine Referenz zum EXE-Formualar ein. Im Fall vom Dienst wird dann entsprechend die Hauptunit vom Dienst eingebunden. Durch dies wird die entsprechende "LogMessage" aufgerufen.
Deshalb beachten, dass beim Wechsel von der EXE zum Datenmodul und umgekehrt immer das gesamte Projekt erzeugt wird, damit es damit keine Probleme gibt.

Mit den Indy-Komponenten ist eine Funktion "SendMail" eingebaut. Infos für das Senden werden aus einer Ini-Datei gelesen, die im selben Ordner wie der Dienst abgelegt sein sollte. Wer das nicht braucht, kann das ja rauswerfen.

Wenn jemand MadExcept benutzt, kann in uServiceMain ein "MadExceptionHandler" einfügen und das Ereignis OnException hinzufügen. Meinen auskommentierten Code dann einbinden. Es wird dann die Exceptions ins Windows EreignisLog gespeichert und auch per eMail versendet.

Beim Starten vom Dienst wird jedesmal eine aussagekräftige Beschreibung für den Dienst im Windows abgelegt (Anzeige in der MMC bei den Diensten). Das könnte man auch beim Installieren einmalig machen, da ich aber beim Kunden immer nur die EXE tausche ohne das Ganze wieder komplett zu installieren, mache ich das so und die Beschreibung wird dann auch aktualisiert.

In der Projektdatei der EXE kann ich dann auch "ReportMemoryLeaksOnShutdown" setzen, um zu prüfen, ob ich keine Speicherlöscher eingebaut habe. Wenn da nichts ist, kann man auch sicher sein, dass es im Dienst damit auch keine Probleme gibt.

Viel Spaß beim Anschauen und benutzen. Wer fragen hat, einfach melden.
Angehängte Dateien
Dateityp: zip ServiceTemplate.zip (169,5 KB, 16x aufgerufen)
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  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 05:55 Uhr.
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