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.
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 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
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
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.
In article <4098ff96$0$21092$626a14ce@news.free.fr>, remi@xtware.com
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.
> 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®
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.
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/
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.
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.
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.
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
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 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.
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
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.
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.
In article <40990e2d$0$27680$636a15ce@news.free.fr>,
arnold.mcdonald@free.fr 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.
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.
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".
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:
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)
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:
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:
-- Patrick Philippot - Microsoft MVP [.Net] MainSoft Consulting Services www.mainsoft.xx (remplacez .xx par .fr si vous répondez par e-mail)
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)
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)
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)