2010-03-09 2 views
1

J'ai un service Windows et je voudrais voir ce qu'il fait quand il démarre. Normalement, pour accomplir quelque chose comme ça, je coderais dur un Thread.Sleep pendant 10 secondes pour me donner assez de temps pour attacher le débogueur. Ceci est efficace, mais ennuyeux, car j'ai besoin de recompiler une fois pour mettre la pause à l'intérieur et à nouveau quand je (je l'espère rappeler) prendre la pause. Je sais que je pourrais alternativement coder en dur une commande de rupture, mais cela exige aussi que je recompile ma solution. Je sais que je peux aussi séparer la logique de mon service en un projet distinct qui peut être exécuté dans Visual Studio, que je peux utiliser la plupart du temps, mais parfois je veux voir exactement ce que mon service fait quand il fonctionne en tant que un service.Puis-je pré-attacher un débogueur à un service?

Est-ce qu'il y a un moyen pour que mon débogueur soit attaché à mon service afin que je puisse voir ce qu'il fait au démarrage, sans coder en dur et recompiler quoi que ce soit?

Répondre

2

Il y a une clé de Registre qui vous donne une chance d'attacher un débogueur au processus dès sa création.

Enregistrez le code suivant comme un fichier * .reg et l'importation à votre Registre:

Windows Registry Editor Version 5.00 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\services.exe] 
"Debugger"="c:\\Program Files\\Debugging Tool For Windows\\windbg.exe" 

vous rappeler de changer « services.exe » aux services réels nom de fichier exécutable.

Vous pouvez également utiliser l'outil gflag pour faciliter le travail. Pour des informations détaillées, veuillez cocher KB 824344: How to debug Windows services

0

Jetez un coup d'œil à l'option Attacher à un processus dans le menu Outils de Visual Studio. Vous pouvez mettre un point d'arrêt dans votre code, puis démarrer le processus et déboguer le service. Vous devrez peut-être mettre un thread.sleep() pour vous donner assez de temps pour réagir.

Vous devez démarrer le service plutôt que de vous connecter au processus dans Visual Studio. Le thread.sleep() vous donnera le temps d'effectuer l'attachement sans souffler par votre code de démarrage.

Questions connexes