2009-10-13 8 views
5

J'utilise Microsoft Log Parser dans un service Windows. Le programme fonctionne dans une page Web normale mais quand je mets le code dans un service de Windows cela ne fonctionne pas. J'ai mis Breakponts dans le service Windows mais quand je cours le code le programme ne s'arrête pas au point d'arrêt. Donc, à travers mon dépannage, j'ai réduit le problème au logiciel Log Parser et Linq. Ainsi, Linq ou le logiciel d'analyse de journaux crée le problème. Est-ce que vous avez une idée?Quelle est la meilleure façon de déboguer un programme de service Windows dans Visual Studio 2008

Répondre

2

Je l'ai fait de nombreuses façons dans le passé selon le fonctionnement du programme. Je pense que la manière la plus facile est faite avec une directive de préprocesseur if #DEBUG autour du Debugger.Launch() de cette façon quand vous avez construit le projet optimisé l'appel de Debugger.Launch() ne sera pas compilé dans l'assembly. Une façon dont nous avons également fait cette tâche est avec System.Windows.Forms.MessageBox.Show ("attach") qui nous a permis de joindre manuellement au débogueur à chaque fois que la boîte de dialogue "attach" était affichée. La dernière façon que je ne préfère pas est de changer le comportement de votre service basé sur les paramètres de ligne de commande passés. En optant NOT principalement pour démarrer les services en utilisant ServiceBase.Run chaque fois qu'un param particulier a été déclenché, mais en appelant une classe qui encapsule le comportement/la fonction principale du service.

+1

Re le dernier point - je crois que vous pouvez également vérifier 'Environment.UserInteractive' pour ceci. –

2

Voulez-vous déboguer la méthode OnStart? Si tel est le cas, vous pouvez utiliser la méthode System.Diagnostics.Debugger.Launch() ou System.Diagnostics.Debugger.Break() pour avoir une chance d'attacher le débogueur pendant que la méthode on start est en cours, sinon vous devrez toujours attacher le débogueur.

2

Je pense que la suggestion du chat gras de joindre votre débogueur au processus de service sonne bien. Si cela ne fonctionne toujours pas, essayez d'utiliser Debug.WriteLine et DebugView.