Τρόπος ανίχνευσης και εντοπισμού σφαλμάτων του Visual C#

Για την Microsoft Visual Basic .NET έκδοση αυτού του άρθρου, ανατρέξτε στην ενότητα
313417 .

Σύνοψη

Αυτό το άρθρο περιγράφει τον τρόπο χρήσης του εντοπισμού σφαλμάτων και τις κλάσεις ανίχνευσης . Αυτές οι κλάσεις είναι διαθέσιμες στο Microsoft .NET Framework. Μπορείτε να χρησιμοποιήσετε αυτές τις κλάσεις για την παροχή πληροφοριών σχετικά με τις επιδόσεις μιας εφαρμογής κατά την ανάπτυξη εφαρμογών, ή μετά την ανάπτυξη, παραγωγή. Αυτές οι κλάσεις είναι μόνο ένα μέρος από τις δυνατότητες των οργάνων που είναι διαθέσιμες στο .NET Framework.


Επιστροφή στην κορυφή

Απαιτήσεις

Η ακόλουθη λίστα περιγράφει το υλικού που συνιστώνται, λογισμικό, υποδομή δικτύου και τα service pack που χρειάζεστε:
  • Τα Windows 2000 ή Microsoft Windows XP ή Microsoft Windows Server 2003
  • Microsoft Visual C#
Επίσης, αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με το πρόγραμμα εντοπισμού σφαλμάτων.

Επιστροφή στην κορυφή

Περιγραφή της τεχνικής


Τα βήματα στην ενότητα Δημιουργία δείγματος με την κλάση εντοπισμού σφαλμάτωνδείχνουν τον τρόπο δημιουργίας μιας εφαρμογής κονσόλας που χρησιμοποιεί η κλάση εντοπισμού σφαλμάτων για να παρέχει πληροφορίες σχετικά με την εκτέλεση του προγράμματος.


Όταν το πρόγραμμα εκτελείται, μπορείτε να χρησιμοποιήσετε τις μεθόδους της κλάσης εντοπισμού σφαλμάτων για να παράγει μηνύματα που σας βοηθούν να παρακολουθείτε την ακολουθία εκτέλεση προγράμματος, για να εντοπίσει δυσλειτουργίες ή να δώσετε πληροφορίες μέτρησης επιδόσεων. Από προεπιλογή, τα μηνύματα που παράγει η κλάση εντοπισμού σφαλμάτων που εμφανίζονται στο παράθυρο εξόδου του Visual Studio ενοποιημένη ανάπτυξη περιβάλλοντος (IDE).

Το δείγμα κώδικα χρησιμοποιεί τη μέθοδο WriteLine για να δημιουργήσετε ένα μήνυμα που ακολουθείται από μια γραμμή τερματισμού. Όταν χρησιμοποιείτε αυτήν τη μέθοδο για να δημιουργήσετε ένα μήνυμα, κάθε μήνυμα εμφανίζεται σε ξεχωριστή γραμμή στο παράθυρο εξόδου.

Όταν χρησιμοποιείτε τη μέθοδο διεκδίκησης εντοπισμού σφαλμάτων κλάσης, το παράθυρο εξόδου εμφανίζει ένα μήνυμα μόνο αν μια συγκεκριμένη συνθήκη αποτιμάται σε false. Το μήνυμα εμφανίζεται επίσης σε ένα αποκλειστικό παράθυρο διαλόγου στο χρήστη. Το παράθυρο διαλόγου περιλαμβάνει το μήνυμα, το όνομα του έργου και ο αριθμός της συμφωνίας Debug.Assert . Το παράθυρο διαλόγου περιλαμβάνει επίσης τα ακόλουθα κουμπιά εντολής τρεις:
  • Ματαίωση: Η εφαρμογή παύει να εκτελείται.
  • Επανάληψη: Η εφαρμογή εισέρχεται σε κατάσταση εντοπισμού σφαλμάτων.
  • Παράβλεψη: Συνεχίζεται η εφαρμογή.
Ο χρήστης πρέπει να επιλέξετε ένα από αυτά τα κουμπιά προκειμένου να συνεχιστεί η εφαρμογή.

Μπορείτε επίσης να κατευθύνετε την έξοδο από την κλάση του εντοπισμού σφαλμάτων σε προορισμούς εκτός του παραθύρου εξόδου. Η κλάση εντοπισμού σφαλμάτων έχει μια συλλογή που ονομάζεται Listeners που περιλαμβάνει αντικείμενα υπηρεσίας ακρόασης .

Κάθε αντικείμενο υπηρεσίας ακρόασης παρακολουθεί εξόδου εντοπισμού σφαλμάτων και κατευθύνει την έξοδο σε έναν καθορισμένο προορισμό.


Κάθε πρόγραμμα ακρόασης της συλλογής ακρόασης λαμβάνει κανένα αποτέλεσμα που δημιουργείται από την κλάση εντοπισμού σφαλμάτων . Χρησιμοποιήστε την κλάση TextWriterTraceListener για να ορίσετε τα αντικείμενα υπηρεσίας ακρόασης . Μπορείτε να καθορίσετε τον προορισμό για μια κλάση TextWriterTraceListener μέσω της κατασκευής.

Ορισμένες πιθανές εξόδου στόχοι περιλαμβάνουν τα εξής:
  • Το παράθυρο της κονσόλας, χρησιμοποιώντας την ιδιότητα System.Console.Out .
  • Ένα αρχείο κειμένου (.txt), χρησιμοποιώντας την εντολή System.IO.File.CreateText("FileName.txt") .
Μετά τη δημιουργία ενός αντικειμένου TextWriterTraceListener , πρέπει να προσθέσετε το αντικείμενο στη συλλογή Debug.Listeners για να λάβετε δεδομένα εξόδου εντοπισμού σφαλμάτων.

Επιστροφή στην κορυφή

Δημιουργία δείγματος με την κλάση εντοπισμού σφαλμάτων

  1. Ξεκινήστε το Visual Studio ή Visual C# Express Edition.
  2. Δημιουργήστε ένα νέο έργο Visual C# κονσόλα εφαρμογής με το όνομα conInfo. Class1 δημιουργείται στο Visual Studio .NET. Program.CS δημιουργείται στο Visual Studio 2005.
  3. Προσθέστε τον ακόλουθο χώρο ονομάτων στην κορυφή σε Class1 ή Program.cs.
    using System.Diagnostics;
  4. Να προετοιμάσει μεταβλητές που να περιέχει πληροφορίες σχετικά με ένα προϊόν, προσθέστε τις ακόλουθες δηλώσεις δήλωση μέθοδο Main :
    string sProdName = "Widget";int iUnitQty = 100;
    double dUnitCost = 1.03;
  5. Καθορίστε το μήνυμα που παράγει η κλάση ως η πρώτη παράμετρος εισόδου της μεθόδου WriteLine . Πιέστε το συνδυασμό πλήκτρων CTRL + ALT + O για να βεβαιωθείτε ότι είναι ορατό το παράθυρο εξόδου.
    Debug.WriteLine("Debug Information-Product Starting ");
  6. Για να είναι ευανάγνωστες, χρησιμοποιήστε τη μέθοδο εσοχής για τη δημιουργία εσοχής σε επόμενα μηνύματα στο παράθυρο εξόδου:
    Debug.Indent();
  7. Για να εμφανίσετε το περιεχόμενο του επιλεγμένου μεταβλητές, χρησιμοποιήστε τη μέθοδο WriteLine ως εξής:
    Debug.WriteLine("The product name is " + sProdName);Debug.WriteLine("The available units on hand are" + iUnitQty.ToString());
    Debug.WriteLine("The per unit cost is " + dUnitCost.ToString());
  8. Μπορείτε επίσης να χρησιμοποιήσετε τη μέθοδο WriteLine για να εμφανίσετε το χώρο ονομάτων και το όνομα της κλάσης για ένα αντικείμενο υπάρχων. Για παράδειγμα, ο ακόλουθος κώδικας εμφανίζει τον χώρο ονομάτων System.Xml.XmlDocument στο παράθυρο εξόδου:
    System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();Debug.WriteLine(oxml);
  9. Για να οργανώσετε τα δεδομένα εξόδου, μπορείτε να συμπεριλάβετε μια παράμετρο κατηγορία ως μια προαιρετική δεύτερη εισόδου της μεθόδου WriteLine . Εάν καθορίσετε μια κατηγορία, η μορφή του μηνύματος παραθύρου εξόδου είναι "κατηγορία: μήνυμα." Για παράδειγμα, η πρώτη γραμμή του ο ακόλουθος κώδικας εμφανίζει "πεδίο: το όνομα προϊόντος είναι γραφικό στοιχείο" στο παράθυρο εξόδου:
    Debug.WriteLine("The product name is " + sProdName,"Field");Debug.WriteLine("The units on hand are" + iUnitQty,"Field");
    Debug.WriteLine("The per unit cost is" + dUnitCost.ToString(),"Field");
    Debug.WriteLine("Total Cost is " + (iUnitQty * dUnitCost),"Calc");
  10. Το παράθυρο εξόδου μπορεί να εμφανίσει μηνύματα μόνο εάν μια καθορισμένη συνθήκη υπολογίζεται ως αληθής, χρησιμοποιώντας τη μέθοδο WriteLineIf της κλάσης εντοπισμού σφαλμάτων . Η συνθήκη προς αξιολόγηση είναι η πρώτη παράμετρος εισόδου της μεθόδου WriteLineIf . Η δεύτερη παράμετρος WriteLineIf είναι το μήνυμα που εμφανίζεται μόνο αν η συνθήκη στην πρώτη παράμετρο αποτιμάται ως αληθής.
    Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");

  11. Χρησιμοποιήστε τη μέθοδο διεκδίκησης εντοπισμού σφαλμάτων κλάσης, έτσι ώστε το παράθυρο εξόδου εμφανίζει το μήνυμα μόνο αν μια συγκεκριμένη συνθήκη αποτιμάται σε false:
    Debug.Assert(dUnitCost > 1, "Message will NOT appear");Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");

  12. Δημιουργήστε τα αντικείμενα TextWriterTraceListener για το παράθυρο κονσόλας (tr1) και ένα αρχείο κειμένου που ονομάζεται Output.txt (tr2) και στη συνέχεια προσθέστε κάθε αντικείμενο στη συλλογή Listeners εντοπισμού σφαλμάτων :
    TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out);Debug.Listeners.Add(tr1);

    TextWriterTraceListener tr2 = new TextWriterTraceListener(System.IO.File.CreateText("Output.txt"));
    Debug.Listeners.Add(tr2);
  13. Για να είναι ευανάγνωστες, χρησιμοποιήστε τη μέθοδο Unindent για να καταργήσετε την εσοχή για επόμενα μηνύματα που το
    Εντοπισμός σφαλμάτων κλάσης δημιουργεί. Όταν χρησιμοποιείτε μαζί την εσοχή και τις μεθόδους Unindent , ο αναγνώστης να διακρίνετε την έξοδο ως ομάδα.
    Debug.Unindent();Debug.WriteLine("Debug Information-Product Ending");
  14. Για να βεβαιωθείτε ότι κάθε αντικείμενο υπηρεσίας ακρόασης λαμβάνει όλα τα δεδομένα εξόδου, η κλήση της μεθόδου εκκένωσης για τα buffer κλάση εντοπισμού σφαλμάτων :
    Debug.Flush();
Επιστροφή στην κορυφή

Χρήση της κλάσης ανίχνευσης

Μπορείτε επίσης να χρησιμοποιήσετε την κλάση ανίχνευσης για την παραγωγή μηνύματα αυτής της οθόνης την εκτέλεση μιας εφαρμογής. Οι κλάσεις ανίχνευσης και εντοπισμού σφαλμάτων κοινής χρήσης οι περισσότερες από τις ίδιες μεθόδους για να παραγάγει δεδομένα εξόδου, συμπεριλαμβανομένων των εξής:
  • WriteLine
  • WriteLineIf
  • Εσοχή
  • Κατάργηση εσοχής
  • Διεκδίκησης
  • Εκκαθάριση
Μπορείτε να χρησιμοποιήσετε την Ανίχνευση και τις κλάσεις Debug χωριστά ή μαζί στην ίδια εφαρμογή. Σε ένα έργο εντοπισμού σφαλμάτων ρύθμισης παραμέτρων λύσης, ανίχνευσης και εντοπισμού σφαλμάτων εξόδου είναι ενεργές. Το project δημιουργεί μια έξοδο από αυτές τις κλάσεις σε όλα τα αντικείμενα υπηρεσίας ακρόασης . Ωστόσο, ένα έργο ρύθμισης παραμέτρων λύσης έκδοση δημιουργεί μόνο έξοδο από μια κλάση ανίχνευσης . Το έργο ρύθμισης παραμέτρων λύσης έκδοση παραβλέπει οποιαδήποτε κλήσεων μέθοδο εντοπισμού σφαλμάτων κλάσης.
Trace.WriteLine("Trace Information-Product Starting ");Trace.Indent();

Trace.WriteLine("The product name is "+sProdName);
Trace.WriteLine("The product name is"+sProdName,"Field" );
Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Trace.Assert(dUnitCost > 1, "Message will NOT appear");

Trace.Unindent();
Trace.WriteLine("Trace Information-Product Ending");

Trace.Flush();

Console.ReadLine();

Επιστροφή στην κορυφή

Βεβαιωθείτε ότι λειτουργεί

  1. Βεβαιωθείτε ότι εντοπισμού σφαλμάτων είναι η τρέχουσα ρύθμιση παραμέτρων λύσης.
  2. Εάν το παράθυρο του Explorer λύση δεν είναι ορατή, πιέστε το συνδυασμό πλήκτρων CTRL + ALT + L, για να εμφανίσετε αυτό το παράθυρο.
  3. Κάντε δεξιό κλικ στο conInfoκαι, στη συνέχεια, κάντε κλικ στο κουμπί
    Ιδιότητες.
  4. Στο αριστερό τμήμα της σελίδας ιδιοτήτων της conInfo, υπό το
    Ρύθμιση παραμέτρων φάκελο, βεβαιωθείτε ότι το βέλος δείχνει προς
    Εντοπισμός σφαλμάτων.

    Σημείωση Στη Visual C# 2005 και Visual C# 2005 Express Edition, κάντε κλικ στην εντολή Debug στη σελίδα conInfo .
  5. Επάνω από το φάκελο της ρύθμισης παραμέτρων , με το
    Ρύθμιση παραμέτρων του πλαισίου αναπτυσσόμενης λίστας, κάντε κλικ Ενεργή (εντοπισμός σφαλμάτων) "ή" Εντοπισμός σφαλμάτωνκαι, στη συνέχεια, κάντε κλικ στο κουμπί
    OK. Στο Visual C# 2005 και Visual C# 2005 Express Edition, κάντε κλικ στην επιλογή ενεργό (εντοπισμός σφαλμάτων) ή εντοπισμό σφαλμάτων στο πλαίσιο αναπτυσσόμενης λίστας παραμέτρων στη σελίδα " Εντοπισμός σφαλμάτων " και, στη συνέχεια, κάντε κλικ στην εντολή Αποθήκευση του μενού αρχείο .
  6. Πιέστε το συνδυασμό πλήκτρων CTRL + ALT + O για να εμφανίσετε το παράθυρο εξόδου.
  7. Πιέστε το πλήκτρο F5 για να εκτελέσετε τον κώδικα. Όταν το
    Αποτυχία διεκδίκησης παράθυρο διαλόγου, κάντε κλικ στο κουμπί
    Παράβλεψη.
  8. Στο παράθυρο της κονσόλας, πιέστε το πλήκτρο ENTER. Το πρόγραμμα θα πρέπει να ολοκληρωθεί και το παράθυρο εξόδου πρέπει να εμφανίζει το αποτέλεσμα που μοιάζει με το ακόλουθο
        Debug Information-Product Starting     The product name is Widget
    The available units on hand are100
    The per unit cost is 1.03
    System.Xml.XmlDocument
    Field: The product name is Widget
    Field: The units on hand are100
    Field: The per unit cost is1.03
    Calc: Total Cost is 103
    This message WILL appear
    ---- DEBUG ASSERTION FAILED ----
    ---- Assert Short Message ----
    Message will appear since dUnitcost < 1 is false
    ---- Assert Long Message ----


    at Class1.Main(String[] args) <%Path%>\class1.cs(34)

    The product name is Widget
    The available units on hand are100
    The per unit cost is 1.03
    Debug Information-Product Ending
    Trace Information-Product Starting
    The product name is Widget
    Field: The product name isWidget
    This message WILL appear
    Trace Information-Product Ending


  9. Το παράθυρο της κονσόλας και το αρχείο Output.txt πρέπει να εμφανίσει το ακόλουθο αποτέλεσμα:
    The product name is Widget    The available units on hand are 100
    The per unit cost is 1.03
    Debug Information-Product Ending
    Trace Information-Product Starting
    The product name is Widget
    Field: The product name is Widget
    This message WILL appear
    Trace Information-Product Ending

Σημείωση Το αρχείο Output.txt βρίσκεται στον ίδιο κατάλογο με το εκτελέσιμο conInfo (conInfo.exe). Συνήθως, πρόκειται για το φάκελο \bin όπου είναι αποθηκευμένο το αρχείο προέλευσης του έργου. Από προεπιλογή, αυτό είναι C:\Documents and Settings\σύνδεση χρήστη\My Documents\Visual Studio Projects\conInfo\bin. Στη Visual C# 2005 και Visual C# 2005 Express Edition, το αρχείο Output.txt βρίσκεται στον ακόλουθο φάκελο:
\My Documents\Visual C:\Documents and Settings\σύνδεση χρήστηStudio 2005\Projects\conInfo\conInfo\bin\Debug


Επιστροφή στην κορυφή

Ολοκληρώσετε την καταχώρηση κωδικού

   using System;   using System.Diagnostics;

class Class1
{
[STAThread]
static void Main(string[] args)
{
string sProdName = "Widget";
int iUnitQty = 100;
double dUnitCost = 1.03;
Debug.WriteLine("Debug Information-Product Starting ");
Debug.Indent();
Debug.WriteLine("The product name is "+sProdName);
Debug.WriteLine("The available units on hand are"+iUnitQty.ToString());
Debug.WriteLine("The per unit cost is "+ dUnitCost.ToString());

System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();
Debug.WriteLine(oxml);

Debug.WriteLine("The product name is "+sProdName,"Field");
Debug.WriteLine("The units on hand are"+iUnitQty,"Field");
Debug.WriteLine("The per unit cost is"+dUnitCost.ToString(),"Field");
Debug.WriteLine("Total Cost is "+(iUnitQty * dUnitCost),"Calc");

Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");

Debug.Assert(dUnitCost > 1, "Message will NOT appear");
Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");

TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(tr1);

TextWriterTraceListener tr2 = new TextWriterTraceListener(System.IO.File.CreateText("Output.txt"));
Debug.Listeners.Add(tr2);


Debug.WriteLine("The product name is "+sProdName);
Debug.WriteLine("The available units on hand are"+iUnitQty);
Debug.WriteLine("The per unit cost is "+dUnitCost);
Debug.Unindent();
Debug.WriteLine("Debug Information-Product Ending");
Debug.Flush();

Trace.WriteLine("Trace Information-Product Starting ");
Trace.Indent();

Trace.WriteLine("The product name is "+sProdName);
Trace.WriteLine("The product name is"+sProdName,"Field" );
Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Trace.Assert(dUnitCost > 1, "Message will NOT appear");


Trace.Unindent();
Trace.WriteLine("Trace Information-Product Ending");

Trace.Flush();

Console.ReadLine();
}
}


Επιστροφή στην κορυφή

Αντιμετώπιση προβλημάτων

  • Εάν ο τύπος ρύθμισης παραμέτρων λύσης έκδοση, τα δεδομένα εξόδου εντοπισμού σφαλμάτων κλάσης αγνοείται.
  • Αφού δημιουργήσετε μια κλάση TextWriterTraceListener για ένα συγκεκριμένο στόχο, TextWriterTraceListener λαμβάνει έξοδο από την Ανίχνευση και τις κλάσεις εντοπισμού σφαλμάτων . Αυτό συμβαίνει ανεξάρτητα από το αν χρησιμοποιείτε τη μέθοδο ανίχνευσης ή την κλάση εντοπισμού σφαλμάτων , για να προσθέσετε την κλάση Listeners TextWriterTraceListener .
  • Εάν προσθέσετε ένα αντικείμενο ακροατές για τον ίδιο προορισμό της ανίχνευσης και τις κλάσεις εντοπισμού σφαλμάτων , κάθε γραμμή εξόδου είναι πανομοιότυπη, ανεξάρτητα από το αν
    Εντοπισμός σφαλμάτων ή Ανίχνευση δημιουργεί το αποτέλεσμα.
             TextWriterTraceListener myWriter = new TextWriterTraceListener(System.Console.Out);         Debug.Listeners.Add(myWriter);

    TextWriterTraceListener myCreator = new TextWriterTraceListener(System.Console.Out);
    Trace.Listeners.Add(myCreator);


Επιστροφή στην κορυφή

Αναφορές

Για περισσότερες πληροφορίες, ανατρέξτε στα ακόλουθα θέματα στην τεκμηρίωση βιβλιοθήκη κλάσης του .NET Framework:Επιστροφή στην κορυφή
Ιδιότητες

Αναγνωριστικό άρθρου: 815788 - Τελευταία αναθεώρηση: 17 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια