Debogger un service

Le
Alain Migeon
Bonjour

J'ai quelques problmes pour dbogguer un service.

Lors de l'installation de mon service, j'ai rajout une cl dans :
HKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution
Optionsmonservice.exe, et une valeur nomme "Debugger" de type REG_SZ
sous cette cl. Cette valeur contient le chemin pour accder
windbg.exe.

Lorsque le service est dmarr, windbg s'xcute.
Jusque l, pas de problme.

Dans windbg, je configure les rpertoires pour les fichiers symbole,
sources et image.

J'obtient l'erreur suivante :
*** ERROR: Symbol file could not be found. Defaulted to export symbols
for ntdll.dll -

Cette erreur n'apparait pas lorsque je dmarre le service sans le
dboggeur, et qu'ensuite j'attache le dboggeur mon service.

Sachant que mon but prcis est de dbogger de faon spcifique le=

dmarrage et l'arrt du service, j'ai besoin d'attacher le deboggeur au=

service avant de dmarrer celui-ci.

Comment faire? Y-a-t-il des solutions alternatives avec d'autres
dboggeur que windbg.

Par avance, merci.

___________________________________________
Alain Migeon - Software engineer
Rovsing Dynamics A/S - Skovlunde - Denmark
Please reverse dk and rovsing for replying.
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Remi Thomas
Le #9848291
Alain Migeon wrote:

Sachant que mon but précis est de débogger de façon spécifique le
démarrage et l'arrêt du service, j'ai besoin d'attacher le deboggeur
au service avant de démarrer celui-ci.



Et en modifiant le compte associé au service est-ce que cela change des
choses ?


Comment faire? Y-a-t-il des solutions alternatives avec d'autres
déboggeur que windbg.




Oui, remanier un peu le code pour le démarrer en ligne de commande.
Par contre l'execution diffère pas mal au niveau des resources réseau et de
la registry.

Rémi

--
Rémi Thomas - MVP Visual Studio .NET
Développeur Windows indépendant
http://www.xtware.com/cv
Alain Migeon
Le #9848271
In article says...
> Sachant que mon but précis est de débogger de façon spécifique le
> démarrage et l'arrêt du service, j'ai besoin d'attacher le deboggeu r
> au service avant de démarrer celui-ci.

Et en modifiant le compte associé au service est-ce que cela change des
choses ?



De quelle façon? J'ai essayé en essayant l'option -W, de manière à
spécifier le workspace, quand le service démarre. Mais le résultat es t
le même.

> Comment faire? Y-a-t-il des solutions alternatives avec d'autres
> déboggeur que windbg.
>

Oui, remanier un peu le code pour le démarrer en ligne de commande.
Par contre l'execution diffère pas mal au niveau des resources réseau et de
la registry.



Est ce que ça revient dans ce cas à démarrer en simple application?

Mon but est de trouver un bogue qui provoque occasionnellement une
erreur lors de l'arrêt du service.

J'ai gardé la possiblité de faire tourner mon programme en simple
application console, de manière à faciliter le déboguage, et n'avoir à
utiliser windbg que pour la partie spécifique au service. La séparation
se fait par un paramètre au lancement du programme.

Dans le cas présent, l'erreur ne se produit pas quand je stoppe mon
programme lorsque que celui-ci a été démarré en mode application.

Alain

___________________________________________
Alain Migeon - Software engineer
Rovsing Dynamics A/S - Skovlunde - Denmark
Please reverse dk and rovsing for replying.
AMcD®
Le #9848251
Alain Migeon wrote:

Bonjour



Yo!

J'ai quelques problèmes pour débogguer un service.



[...]

J'obtient l'erreur suivante :
*** ERROR: Symbol file could not be found. Defaulted to export
symbols for ntdll.dll -



Cette erreur m'a gonflé plusieurs fois. Et je suis poli. J'ai tout essayé,
fichiers de symboles à jour, variables d'environnements, etc. Suivant les
versions de Windows et de WinDbg, j'en ai déduit qu'il fallait que les
symboles se trouvent dans un dossier "basique", du style, pas avec des
espaces.

c:grrmphouillesymbols marche.
c:grrrmphouillesymbols XPsymbols marche pas.

Comme en général les gars mettent dans c:symbols ou utilisent une connexion
internet, c'est pas une erreur répandue. Moi, c'est tout ce que j'ai pu
trouver à ce sujet. En gros, un conflit de noms, chemins, etc.

Tiens-moi au courant.

--
AMcD®

http://arnold.mcdonald.free.fr/
Arnaud Debaene
Le #9848221
Alain Migeon wrote:
Bonjour

J'ai quelques problèmes pour débogguer un service.

Lors de l'installation de mon service, j'ai rajouté une clé dans :
HKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution
Optionsmonservice.exe, et une valeur nommée "Debugger" de type REG_SZ
sous cette clé. Cette valeur contient le chemin pour accéder à
windbg.exe.

Lorsque le service est démarré, windbg s'éxécute.
Jusque là, pas de problème.



<snip>

Comment faire? Y-a-t-il des solutions alternatives avec d'autres
déboggeur que windbg.


Faire la même chose avc VC si tu en disposes : l'entrée dans la base de
registre doit être devenv /debugexe

Arnaud

PS : le service doit pouvoir interagir avec le bureau, mais ca tu le sais je
pense.

PPS : Si tu ne t'en sors pas, utilises la solution brutale : DebugBreak.
Alain Migeon
Le #9848021
In article says...
Cette erreur m'a gonflé plusieurs fois. Et je suis poli. J'ai tout essa yé,
fichiers de symboles à jour, variables d'environnements, etc. Suivant l es
versions de Windows et de WinDbg, j'en ai déduit qu'il fallait que les
symboles se trouvent dans un dossier "basique", du style, pas avec des
espaces.

c:grrmphouillesymbols marche.
c:grrrmphouillesymbols XPsymbols marche pas.



J'avais effectivement des noms de répertoires contenant des espaces.
J'ai réessayé avec des noms classiques, sans succès.

Pour l'instant, je vais me contenter de mettre quelques "MessageBox"
pour débogger mon code. En attendant de trouver la solution si elle
existe.

Tiens-moi au courant.



Pas de problème.

___________________________________________
Alain Migeon - Software engineer
Rovsing Dynamics A/S - Skovlunde - Denmark
Please reverse dk and rovsing for replying.
AMcD®
Le #9848011
T'as bien réglé les variables d'environnement _NT_SYMBOL_PATH, etc. ?

--
AMcD®

http://arnold.mcdonald.free.fr/
Thierry
Le #9847921
Alain Migeon @news.free.fr:

Comment faire? Y-a-t-il des solutions alternatives avec d'autres
d‚boggeur que windbg.




Ben avec VC : debug/attach to process/checker (de mémoire) "show system
process".
Patrick Philippot
Le #9847901
Alain Migeon wrote:
Comment faire? Y-a-t-il des solutions alternatives avec d'autres
déboggeur que windbg.



[je viens de m'apercevoir que Rémi a déjà fait la même suggestion mais
bon, j'ai déjà écrit le message :-) ]

Pour éviter la crise de nerfs, il y a une solution très simple pour
déboguer un service, basée sur un constat évident: un service est une
appli comme une autre à ceci près qu'elle tourne en dehors d'un logon et
qu'elle doit limiter ses interactions avec le desktop. Moyennant quoi,
il suffit d'ajouter un switch sur la ligne de commande qui permet de le
lancer en tant que process "normal" et on débogue son service comme une
appli standard dans VC++.

Quand ce switch est utilisé, on n'enregistre pas le service auprès du
système (on bypasse les appels au service manager), on tourne simplement
l'appli.

J'utilise personnellement cette technique depuis longtemps et cela m'a
fait gagner beaucoup de temps.

Les seuls problèmes que l'on ne peut pas tracer avec cette technique
sont les problèmes directement liés au fait que l'appli est un service
(par exemple, obtention d'une info dépendant du user courant s'il y en a
un, pb d'interaction avec le desktop, ...) mais en général, ce sont des
problèmes marginaux. Le gros de l'appli peut se déboguer comme décrit
ci-dessus.

Je crois qu'il y a une exemple de framework MFC utilisant cette
technique (avec un wizard associé) sur CodeProject... Oui:

http://www.codeguru.com/Cpp/W-P/system/ntservices/article.php/c2847
http://www.codeguru.com/Cpp/W-P/system/
http://www.codeguru.com/Cpp/W-P/system/ntservices/article.php/c2809/
http://www.codeguru.com/Cpp/W-P/system/ (rubrique service)

Si je me souviens bien, le code proposé dmande quelques ajustements mais
globalement, ça fonctionne.

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.xx
(remplacez .xx par .fr si vous répondez par e-mail)
Patrick Philippot
Le #9847891
Patrick Philippot wrote:
sur CodeProject



CodeGuru, pardon.

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.xx
(remplacez .xx par .fr si vous répondez par e-mail)
Patrick Philippot
Le #9847881
Patrick Philippot wrote:
Pour éviter la crise de nerfs, il y a une solution très simple pour



Bon, je n'ai rien dit. La prochaine fois, je lirai tout le thread avant
de répondre. J'espère que les quelques infos fournies seront utiles
quand même.

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.xx
(remplacez .xx par .fr si vous répondez par e-mail)
Publicité
Poster une réponse
Anonyme