Meilleur auteur de réponses
fonction Trace et Debug

Question
-
bonjour,
j'ai créer une application avec 2010 et aujourd'hui suite a des bug je souhaiterais tracer les actions des utilisateurs étant donné que ces derniers ne savent jamais comment reproduire les bugs.
j'ai regarder les fonction Debug et Trace et je dois bien avouer que je saisi difficilement leur utilisation.
je pensais que la création d'un listener permettait de relever les différentes actions effectuées. Malheureusement dans tous les exemples que j'ai regarder et essayer de comprendre a chaque fois il est nécessaire de rajouter writeline ou write pour aller écrire dans le fichier Log.
D'ou mon interrogation a quoi sert la classe trace si il faut aller mettre les lignes que l'on souhaite ecrire dans le code de l'application.
Si quelqu'un pouvait m'expliquer le fonctionnement de la classe Trace cela serait sympa.
Cordialement
Xavier
- Modifié fanchy jeudi 20 décembre 2012 11:01
Réponses
-
Bonjour,
L'idée est juste de séparer ce que l'on écrit vers la trace et la destination réelle des ces informations. On doit effectivement faire un Trace.WriteLine (comment l'application pourrait savoir ce que l'on veut tracer ?)
A cette trace sont également associées des "écouteurs" ce qui permet au final de diriger cette information vers n'importe quelle destination, un fichier texte ou xml, le journal des évènements de Windows etc...
Voir peut-être du côté de http://msdn.microsoft.com/fr-fr/library/x5952w0c.aspx
Cet outil : http://windows.microsoft.com/fr-fr/windows7/How-do-I-use-Problem-Steps-Recorder permet éventuellement à un utilisateur de capturer rapidement les étapes suivies pour produire un bug.
Il serait peut-être effectivement intéressant de voir le principe de ce produit et de l'intégrer éventuellement dans une appli ce qui permettrait de tracer par exemple les appuis sur les boutons etc... (j'imagine que c'est basé sur les "Hooks" Windows).
Dans un premier temps commencer peut-être par mettre des traces çà et là...
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
- Marqué comme réponse Aurel Bera mardi 8 janvier 2013 08:04
-
Bonjour,
J'ai vu du code ou il est possible d'écouté tous les messages d'une WinForm, il est certainement possible de faire une sortie vers un fichier texte (et faire un filtre sur les messages)
edit le code :
Imports System Imports System.Runtime.InteropServices Imports System.Drawing Imports System.ComponentModel Imports System.Windows.Forms Public Class MainClass Shared Sub Main(ByVal args As String()) Dim myform As Form = New Form1() Application.Run(myform) End Sub End Class Public Class Form1 Public Structure Rect Public left As Integer Public top As Integer Public right As Integer Public bottom As Integer End Structure Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) Const WM_SIZING As Long = &H214 Const WMSZ_LEFT As Integer = 1 Const WMSZ_RIGHT As Integer = 2 Const WMSZ_TOP As Integer = 3 Const WMSZ_TOPLEFT As Integer = 4 Const WMSZ_TOPRIGHT As Integer = 5 Const WMSZ_BOTTOM As Integer = 6 Const WMSZ_BOTTOMLEFT As Integer = 7 Const WMSZ_BOTTOMRIGHT As Integer = 8 Static fixed_aspect_ratio As Double = 0 Dim new_aspect_ratio As Double If m.Msg = WM_SIZING And m.HWnd.Equals(Me.Handle) Then Dim r As Rect = DirectCast(Marshal.PtrToStructure(m.LParam, GetType(Rect)), Rect) Dim width As Double = r.right - r.left Dim height As Double = r.bottom - r.top new_aspect_ratio = height / width If fixed_aspect_ratio = 0 Then fixed_aspect_ratio = new_aspect_ratio End If If fixed_aspect_ratio <> new_aspect_ratio Then If m.WParam.ToInt32 = WMSZ_TOPLEFT Or m.WParam.ToInt32 = WMSZ_TOPRIGHT Or m.WParam.ToInt32 = WMSZ_BOTTOMLEFT Or m.WParam.ToInt32 = WMSZ_BOTTOMRIGHT Then If new_aspect_ratio > fixed_aspect_ratio Then width = height / fixed_aspect_ratio Else height = width * fixed_aspect_ratio End If ElseIf m.WParam.ToInt32 = WMSZ_LEFT Or m.WParam.ToInt32 = WMSZ_RIGHT Then height = width * fixed_aspect_ratio ElseIf m.WParam.ToInt32 = WMSZ_TOP Or m.WParam.ToInt32 = WMSZ_BOTTOM Then width = height / fixed_aspect_ratio End If If m.WParam.ToInt32 = WMSZ_TOP Or m.WParam.ToInt32 = WMSZ_TOPLEFT Or m.WParam.ToInt32 = WMSZ_TOPRIGHT _ Then r.top = r.bottom - CInt(height) Else r.bottom = r.top + CInt(height) End If If m.WParam.ToInt32 = WMSZ_LEFT Or m.WParam.ToInt32 = WMSZ_TOPLEFT Or m.WParam.ToInt32 = WMSZ_BOTTOMLEFT Then r.left = r.right - CInt(width) Else r.right = r.left + CInt(width) End If Marshal.StructureToPtr(r, m.LParam, True) End If End If Console.WriteLine(m) MyBase.WndProc(m) End Sub End Class
Cordialement,
- Modifié TroxsaEditor jeudi 20 décembre 2012 19:29 j'ai trouvé le code :-)
- Marqué comme réponse Aurel Bera mardi 8 janvier 2013 08:05
-
Bonsoir,
La classe Debug ne va fonctionner que lorsque votre application est en développement (compilation Debug dans VS). Avec ce mode toutes vos instructions Debug.WriteLine("exemple") seront redirigées vers la console interne de VS (output). La classe Trace comme l'a dit Patrice permet de rediriger sont flux comme on le souhaite (xml, html, txt...). Contrairement à la classe Debug, Trace fonctionne en compilation Release mais aussi Debug. Voir les liens proposés par Patrice.
Vous pouvez aussi utiliser l'événement AppDomain.CurrentDomain.UnhandledException qui sera appelé lors d'une erreur non gérée. Cet événement doit être implémenté au chargement de l'application. Grâce à lui à chaque problème il passera par cet événement. ça facilitera la Trace pour éviter d'écrire beaucoup de code.
Cordialement
Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !
- Modifié Lyamine jeudi 20 décembre 2012 22:16
- Marqué comme réponse Aurel Bera mardi 8 janvier 2013 08:05
-
Bonjour
Une solution c’est d’utiliser Entreprise Library:
http://msdn.microsoft.com/en-us/library/ff647732.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1
Je la préfère parce ’que on a la possibilité de rapporter les exceptions dans n’importe quel format, sans recompiler l’application, aussi que on a la possibilité d’avoir plusieurs fichiers de log par jour/semaine et de effacer les fichiers plus vieux (ca viens après une expérience après un fichier de log de 40 GO).
Cordialement,
- Proposé comme réponse TroxsaEditor vendredi 28 décembre 2012 10:26
- Marqué comme réponse Aurel Bera mardi 8 janvier 2013 08:05
-
Bonjour,
Pouvons-nous considérer que vous avez résolu votre problème avec les scénarios proposés ? Dans l'affirmative, pourriez-vous partager avec nous la solution, afin que d'autres personnes avec le même problème puissent profiter de cette solution ?
Désormais, nous marquons les solutions proposées. N'hésitez pas à revenir et supprimer la réponse marquée si la solution n’est pas correcte. Merci !
Cordialement,
- Marqué comme réponse fanchy lundi 4 février 2013 07:28
Toutes les réponses
-
Bonjour,
L'idée est juste de séparer ce que l'on écrit vers la trace et la destination réelle des ces informations. On doit effectivement faire un Trace.WriteLine (comment l'application pourrait savoir ce que l'on veut tracer ?)
A cette trace sont également associées des "écouteurs" ce qui permet au final de diriger cette information vers n'importe quelle destination, un fichier texte ou xml, le journal des évènements de Windows etc...
Voir peut-être du côté de http://msdn.microsoft.com/fr-fr/library/x5952w0c.aspx
Cet outil : http://windows.microsoft.com/fr-fr/windows7/How-do-I-use-Problem-Steps-Recorder permet éventuellement à un utilisateur de capturer rapidement les étapes suivies pour produire un bug.
Il serait peut-être effectivement intéressant de voir le principe de ce produit et de l'intégrer éventuellement dans une appli ce qui permettrait de tracer par exemple les appuis sur les boutons etc... (j'imagine que c'est basé sur les "Hooks" Windows).
Dans un premier temps commencer peut-être par mettre des traces çà et là...
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
- Marqué comme réponse Aurel Bera mardi 8 janvier 2013 08:04
-
Bonjour,
J'ai vu du code ou il est possible d'écouté tous les messages d'une WinForm, il est certainement possible de faire une sortie vers un fichier texte (et faire un filtre sur les messages)
edit le code :
Imports System Imports System.Runtime.InteropServices Imports System.Drawing Imports System.ComponentModel Imports System.Windows.Forms Public Class MainClass Shared Sub Main(ByVal args As String()) Dim myform As Form = New Form1() Application.Run(myform) End Sub End Class Public Class Form1 Public Structure Rect Public left As Integer Public top As Integer Public right As Integer Public bottom As Integer End Structure Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) Const WM_SIZING As Long = &H214 Const WMSZ_LEFT As Integer = 1 Const WMSZ_RIGHT As Integer = 2 Const WMSZ_TOP As Integer = 3 Const WMSZ_TOPLEFT As Integer = 4 Const WMSZ_TOPRIGHT As Integer = 5 Const WMSZ_BOTTOM As Integer = 6 Const WMSZ_BOTTOMLEFT As Integer = 7 Const WMSZ_BOTTOMRIGHT As Integer = 8 Static fixed_aspect_ratio As Double = 0 Dim new_aspect_ratio As Double If m.Msg = WM_SIZING And m.HWnd.Equals(Me.Handle) Then Dim r As Rect = DirectCast(Marshal.PtrToStructure(m.LParam, GetType(Rect)), Rect) Dim width As Double = r.right - r.left Dim height As Double = r.bottom - r.top new_aspect_ratio = height / width If fixed_aspect_ratio = 0 Then fixed_aspect_ratio = new_aspect_ratio End If If fixed_aspect_ratio <> new_aspect_ratio Then If m.WParam.ToInt32 = WMSZ_TOPLEFT Or m.WParam.ToInt32 = WMSZ_TOPRIGHT Or m.WParam.ToInt32 = WMSZ_BOTTOMLEFT Or m.WParam.ToInt32 = WMSZ_BOTTOMRIGHT Then If new_aspect_ratio > fixed_aspect_ratio Then width = height / fixed_aspect_ratio Else height = width * fixed_aspect_ratio End If ElseIf m.WParam.ToInt32 = WMSZ_LEFT Or m.WParam.ToInt32 = WMSZ_RIGHT Then height = width * fixed_aspect_ratio ElseIf m.WParam.ToInt32 = WMSZ_TOP Or m.WParam.ToInt32 = WMSZ_BOTTOM Then width = height / fixed_aspect_ratio End If If m.WParam.ToInt32 = WMSZ_TOP Or m.WParam.ToInt32 = WMSZ_TOPLEFT Or m.WParam.ToInt32 = WMSZ_TOPRIGHT _ Then r.top = r.bottom - CInt(height) Else r.bottom = r.top + CInt(height) End If If m.WParam.ToInt32 = WMSZ_LEFT Or m.WParam.ToInt32 = WMSZ_TOPLEFT Or m.WParam.ToInt32 = WMSZ_BOTTOMLEFT Then r.left = r.right - CInt(width) Else r.right = r.left + CInt(width) End If Marshal.StructureToPtr(r, m.LParam, True) End If End If Console.WriteLine(m) MyBase.WndProc(m) End Sub End Class
Cordialement,
- Modifié TroxsaEditor jeudi 20 décembre 2012 19:29 j'ai trouvé le code :-)
- Marqué comme réponse Aurel Bera mardi 8 janvier 2013 08:05
-
Bonsoir,
La classe Debug ne va fonctionner que lorsque votre application est en développement (compilation Debug dans VS). Avec ce mode toutes vos instructions Debug.WriteLine("exemple") seront redirigées vers la console interne de VS (output). La classe Trace comme l'a dit Patrice permet de rediriger sont flux comme on le souhaite (xml, html, txt...). Contrairement à la classe Debug, Trace fonctionne en compilation Release mais aussi Debug. Voir les liens proposés par Patrice.
Vous pouvez aussi utiliser l'événement AppDomain.CurrentDomain.UnhandledException qui sera appelé lors d'une erreur non gérée. Cet événement doit être implémenté au chargement de l'application. Grâce à lui à chaque problème il passera par cet événement. ça facilitera la Trace pour éviter d'écrire beaucoup de code.
Cordialement
Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !
- Modifié Lyamine jeudi 20 décembre 2012 22:16
- Marqué comme réponse Aurel Bera mardi 8 janvier 2013 08:05
-
Bonjour
Une solution c’est d’utiliser Entreprise Library:
http://msdn.microsoft.com/en-us/library/ff647732.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1
Je la préfère parce ’que on a la possibilité de rapporter les exceptions dans n’importe quel format, sans recompiler l’application, aussi que on a la possibilité d’avoir plusieurs fichiers de log par jour/semaine et de effacer les fichiers plus vieux (ca viens après une expérience après un fichier de log de 40 GO).
Cordialement,
- Proposé comme réponse TroxsaEditor vendredi 28 décembre 2012 10:26
- Marqué comme réponse Aurel Bera mardi 8 janvier 2013 08:05
-
Bonjour,
Pouvons-nous considérer que vous avez résolu votre problème avec les scénarios proposés ? Dans l'affirmative, pourriez-vous partager avec nous la solution, afin que d'autres personnes avec le même problème puissent profiter de cette solution ?
Désormais, nous marquons les solutions proposées. N'hésitez pas à revenir et supprimer la réponse marquée si la solution n’est pas correcte. Merci !
Cordialement,
- Marqué comme réponse fanchy lundi 4 février 2013 07:28
-
Bonjour,
Merci pour toutes vos réponses.
Désolé de ne pas avoir répondu plus tôt, mon silence étant du a des problèmes personnels.
J'ai bien pris connaissances de l'ensemble des scénarios proposes et j'ai pu comprendre plus facilement le mode de fonctionnement du trace et du debug.
Merci pour vos réponses
Cordialement
Xavier