Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Debogger un service

16 réponses
Avatar
Alain Migeon
Bonjour

J'ai quelques probl=E8mes pour d=E9bogguer un service.

Lors de l'installation de mon service, j'ai rajout=E9 une cl=E9 dans :
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution=20
Options\monservice.exe, et une valeur nomm=E9e "Debugger" de type REG_SZ=20
sous cette cl=E9. Cette valeur contient le chemin pour acc=E9der =E0=20
windbg.exe.

Lorsque le service est d=E9marr=E9, windbg s'=E9x=E9cute.
Jusque l=E0, pas de probl=E8me.

Dans windbg, je configure les r=E9pertoires pour les fichiers symbole,=20
sources et image.

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

Cette erreur n'apparait pas lorsque je d=E9marre le service sans le=20
d=E9boggeur, et qu'ensuite j'attache le d=E9boggeur =E0 mon service.

Sachant que mon but pr=E9cis est de d=E9bogger de fa=E7on sp=E9cifique le=
=20
d=E9marrage et l'arr=EAt du service, j'ai besoin d'attacher le deboggeur au=
=20
service avant de d=E9marrer celui-ci.

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

Par avance, merci.

___________________________________________
Alain Migeon - Software engineer
Rovsing Dynamics A/S - Skovlunde - Denmark
Please reverse dk and rovsing for replying.

10 réponses

1 2
Avatar
Remi Thomas
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
Avatar
Alain Migeon
In article <4098ff96$0$21092$,
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.
Avatar
AMcD®
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/
Avatar
Arnaud Debaene
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.
Avatar
Alain Migeon
In article <40990e2d$0$27680$,
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.
Avatar
AMcD®
T'as bien réglé les variables d'environnement _NT_SYMBOL_PATH, etc. ?

--
AMcD®

http://arnold.mcdonald.free.fr/
Avatar
Thierry
Alain Migeon wrote in news:MPG.1b031b4c14b262bf9896a5
@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".
Avatar
Patrick Philippot
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)
Avatar
Patrick Philippot
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)
Avatar
Patrick Philippot
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)
1 2