ProcDump 6.0 : support du filtrage sur messages d'exceptions .NET, des filtres multiples et du ciblage par nom de service
D'après le post sur le blog Sysinternals la dernière version majeure de ProcDump, très sympathique outil de prise de dump offrant un bon nombre de possibilités de paramétrage, apporte quelques évolutions plutôt pratiques :
- affichage et filtrage sur le message des exceptions .NET (ou JScript)
- support des filtres multiples
- ciblage de processus par nom de service Windows
Affichage et filtrage sur le message des exceptions .NET (ou JScript)
Le switch -f agit maintenant sur le message de l'exception .NET en plus du nom du type de l'exception.
Cela peut s'avérer intéressant avec certains types d'exception dont le message contient des informations de contexte intéressantes : par exemple filtrer sur la description permet ainsi de limiter le nombre de dumps pris avant de tomber sur la bonne exception.
A titre d'exemple, voici une ligne de commande permettant d'obtenir un dump pour une exception de première chance du type InvalidOperationException dont le message contient "filtrez-moi" :
procdump -e 1 -f "System.InvalidOperationException*filtrez-moi*" -w ProcDumpTestBench
Ainsi, le dump n'est pris qu'à la 3ème exception levée par mon programme de test : la première avait le bon message mais pas le bon type, la seconde avait le bon type mais pas le bon message :
ProcDump v6.00 - Writes process dump files
Copyright (C) 2009-2013 Mark Russinovich
Sysinternals - www.sysinternals.com
With contributions from Andrew Richards
Waiting for process named ProcDumpTestBench...
Process: ProcDumpTestBench.exe (6556)
CPU threshold: n/a
Performance counter: n/a
Commit threshold: n/a
Threshold seconds: n/a
Number of dumps: 1
Hung window check: Disabled
Exception monitor: First Chance+Unhandled
Exception filter: *System.InvalidOperationException*filtrez-moi*
Terminate monitor: Disabled
Dump file: D:\Temp\ProcDumpTestBench_YYMMDD_HHMMSS.dmp
Press Ctrl-C to end monitoring without terminating the process.
CLR Version: v4.0.30319
[13:39:06] Exception: E0434F4D.System.NullReferenceException ("Filtrez-moi !")
[13:39:13] Exception: E0434F4D.System.InvalidOperationException ("Operation is not valid due to the current state of the object.")
[13:39:33] Exception: E0434F4D.System.InvalidOperationException ("Filtrez-moi !")
First-chance Exception.
Writing dump file D:\Temp\ProcDumpTestBench_130520_133933.dmp ...
Dump written.
Dump count reached.
Concernant le support JScript, je vous laisse tester.
Support des filtres multiples
Il est maintenant possible de spécifier plusieurs fois le switch -f, ce qui nous permet d'effectuer un filtrage en mode "OU".
Pour reprendre mon test précédent, si je veux obtenir un dump pour une exception de première chance du type InvalidOperationException dont le message contient "filtrez-moi" OU quand une exception de type NullReferenceException est levée, je peux utiliser une ligne de commande de ce type :
procdump -n 3 -e 1 -f "System.NullReferenceException" -f "System.InvalidOperationException*filtrez-moi*" -w ProcDumpTestBench
Au passage : "-n 3" permet de prendre au maximum 3 dumps avant que ProcDump s'arrête. Dans le cas présent je ne l'utilise pas pour limiter le nombre de dump pris mais plutôt pour pouvoir en prendre plusieurs avant que ProcDump se coupe (sinon par défaut il se coupe au premier dump pris) et me permet ainsi d'obtenir plusieurs dumps sans relancer la commande.
On voit qu'aucun dump n'est pris pour la première exception car elle ne correspond à aucun des 2 filtres, mais que les 3 suivantes ont déclenché une prise de dump car elles correspondaient à au moins un des 2 filtres :
Copyright (C) 2009-2013 Mark Russinovich
Sysinternals - www.sysinternals.com
With contributions from Andrew Richards
Waiting for process named ProcDumpTestBench...
Process: ProcDumpTestBench.exe (6556)
CPU threshold: n/a
Performance counter: n/a
Commit threshold: n/a
Threshold seconds: n/a
Number of dumps: 3
Hung window check: Disabled
Exception monitor: First Chance+Unhandled
Exception filter: *System.NullReferenceException*
*System.InvalidOperationException*filtrez-moi*
Terminate monitor: Disabled
Dump file: D:\Temp\ProcDumpTestBench_YYMMDD_HHMMSS.dmp
Press Ctrl-C to end monitoring without terminating the process.
CLR Version: v4.0.30319
[13:49:05] Exception: E0434F4D.System.InvalidOperationException ("Operation is not valid due to the current state of the
object.")
[13:49:44] Exception: E0434F4D.System.NullReferenceException ("Object reference not set to an instance of an object.")
First-chance Exception.
Writing dump file D:\Temp\ProcDumpTestBench_130520_134944.dmp ...
Dump written.
[13:49:48] Exception: E0434F4D.System.NullReferenceException ("Filtrez-moi !")
First-chance Exception.
Writing dump file D:\Temp\ProcDumpTestBench_130520_134948.dmp ...
Dump written.
[13:49:50] Exception: E0434F4D.System.InvalidOperationException ("Filtrez-moi !")
First-chance Exception.
Writing dump file D:\Temp\ProcDumpTestBench_130520_134950.dmp ...
Dump written.
Dump count reached.
Ciblage de processus par nom de service Windows
Auparavant on ne pouvait spécifier la cible que par son nom de processus ou son ID.
Maintenant on peut aussi utiliser le nom de service, ce qui peut être pratique lors des sessions de debug d'un même service dont plusieurs instances se trouvent sur la même machine (exemple connu : SQL Server et ses instances nommées) : on évite ainsi de changer manuellement l'ID processus dans la ligne de commande ProcDump à chaque fois que le service démarre, car dans le cas d'instance multiples le nom du processus n'est pas pratique : toutes les instances du service portent le même nom de processus, seul le nom de service diffère.
Ce qui est dommage dans le cas présent c'est que le switch -w ne semble pas être supporté quand on spécifie un nom de service.
Pour rappel le switch -w nous permet de demander à ProcDump de se mettre en attente du démarrage de la cible si elle n'est pas encore disponible au lancement de la commande.
Le switch -w couplé à la spécification du nom de service pourrait nous permettre de debugger plus facilement les scénarios où le service rencontre une erreur au démarrage (ou très peu de temps après).
Dommage, mais j'espère que ce support viendra plus tard :-)
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :