DebugView : voir les traces de son application sans debugger
Lorsque l'on debug une application, nous avons besoin d'informations sur le contenu des variables, l'endroit où le programme se situe etc ...
Généralement, on utilise un débuggeur que l'on attache à notre programme afin de visualiser ce genre d'informations. Dans certains cas, on ne peut pas attacher un debuggeur : application en production, debuggeur qui modifie le comportement de l'application, debuggeur beaucoup trop long à se lancer, etc ...
On peut alors écrire nos infos de debug dans un fichier ... Ce n'est pas très propre ! Il existe une solution beaucoup plus propre : utiliser Debug.Write / Trace.Write.
static void Main(string[] args)
{
Debug.WriteLine("Avec Debug");
Trace.WriteLine("Avec Trace");
}
Si vous avez un debuggeur attaché, alors vous retrouverez ces informations dans la console Output lors du debug.
Si vous n'avez pas de debugger attaché, vous pouvez configurer des listeners au niveau du fichier de config afin de récupérer ces messages et les renvoyer où vous le souhaitez. Vous pouvez également utiliser l'application DebugView de SysInternals
Comment cela fonctionne ?
DebugView affiche tous les messages envoyés à la méthode OutputDebugString de Kernel32.dll. Lorsque l'on fait un Debug.Write ou Trace.Write, le framework .net utilise en interne cette API.
Quelle différence entre Debug.Write et Trace.Write ? Quasiment aucune !
public sealed class Debug
{
[Conditional("DEBUG")]
public static void Write(string message)
{}
}
public sealed class Trace
{
[Conditional("TRACE")]
public static void Write(string message)
{}
}
La seule différence se situe au niveau de l'attribut ConditionalAttribute, cet attribut permet de compiler les lignes utilisant ces méthodes seulement si le compiler possède les constantes requise.
Dans notre cas, les appels à Debug.Write seront compilés seulement si la constante DEBUG est définie. Par défaut la constante DEBUG est définit lorsque l'on compile en mode "debug" et la constante TRACE est définit lorsque l'on compile en mode "debug" et "release".
On peut modifier ce comportement dans les propriétés du projet.
DebugView possède de nombreuses options, je n'ai pas testé toutes les fonctionnalités, la plupart sont orienté debug de code natif. Parmi les options interessantes pour un développeur .net, il y a la possibilité d'attraper les messages d'une application s'exécutant sur une machine distante.