C++-Dienste mit Debugkonfiguration debuggen



  • Hallo *,

    ich habe hier einen C++-Dienst geschrieben (kein CLR-Dienst, sondern WinAPI).
    Zurzeit debugge ich folgendermaßen:
    - Release kompilieren
    - Dienst starten (10s schlafen, um zu attachen)
    - In Visual Studio 2005 "Attach to process"
    - und warten bis der Schlaf vorbei ist und der Debugger an meinen ersten Breakpoint hüpft.

    Das Problem ist, dass der Dienst sich nur in der Release-Konfiguration starten lässt. Wenn ich mit der Debug-Konfiguration kompiliere und den Dienst damit starten will, startet der Dienst nicht.
    Und Release debuggen, macht echt kein Spaß, der Debugger macht eigentlich was er will.

    Meine Frage ist nun, ob ihr eine Möglichkeit kennt, den Dienst doch irgendwie mit der Debug-Konfiguration zum Laufen zu bekommen, weil wie gesagt das Debuggen mit Release-Binaries echt keinen Sinn hat!

    Danke für eure Mühe.
    Grüße



  • Warum startet denn die Debug-Version nicht? Schau mal in das Event-Log...



  • Er trägt zwei Fehler in den EventLog ein.

    1. Zeitüberschreitung (30000 ms) beim Verbindungsversuch mit Dienst "Dummy".

    2. Der Dienst "Dummy" wurde aufgrund folgenden Fehlers nicht gestartet:
    Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung.
    --> Dieser zweite Fehler wird mir zusätzlich mit einer MessageBox ausgegeben.

    Zum ersten Fehler:
    Es dauert garantiert keine 30 Sekunden bis die MessageBox hochkommt. Gleich nachdem ich den Dienst starte, bekomme ich den Fehler. Er schläft nicht mal die 10 Sekunden, die ich zum Attachen benötige, obwohl es die erste Zeile meiner main()-Funktion ist.

    Wie gesagt, mit der Release-Konfiguration klappt alles wunderbar.

    Danke nochmals.
    Grüße



  • Mein Dienst läuft wahlweise als Dienst oder als normales Konsolen-Programm (einfach per "MeinDiesnt.exe CONSOLE" starten, für die Konsolen-Version).

    Zum Debuggen starte ich die Konsolen-Variante.



  • frenki schrieb:

    ... einfach per "MeinDiesnt.exe CONSOLE" starten, für die Konsolen-Version...

    Ah ok, bloß wie meinst du das? Von wo aus muss ich die Anwendung mit "MeinDienst.exe CONSOLE" starten? Von der Konsole aus oder gibts da ne Einstellung im Studio?

    Danke für deine Antwort!
    Hoffe es wird klappen :-)!

    Grüße



  • Entsprechend den Infos auf der Befehlszeile, wartest Du entweder auf den SCM und startest den Service, oder Du rufst eben Deine Service Routine auf.

    Testest Du unter XP? Dann kannst Du einen DebugBreak verwenden.
    Schau mal diesen Artikel an:
    http://www.debuginfo.com/articles/debugstartup.html


Log in to reply