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

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 815788 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Για την έκδοση 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 Integrated Development Environment (IDE).

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

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

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

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

eachΗ λειτουργία ακρόασηςΣτοΗ λειτουργία ακρόασηςσυλλογή λαμβάνει κανένα αποτέλεσμα που τοΟ εντοπισμός σφαλμάτωνη κλάση δημιουργεί. Χρήση του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. Για να προετοιμάσει μεταβλητές που να περιέχει πληροφορίες σχετικά με ένα προϊόν, προσθέστε τις ακόλουθες προτάσεις δήλωσης για ναΚύριοςΗ μέθοδος:
    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. Το παράθυρο εκτύπωσης μπορεί να εμφανίσει μηνύματα μόνο εάν η καθορισμένη συνθήκη αποτιμάται σε true, χρησιμοποιώντας τοWriteLineIfη μέθοδος τουΟ εντοπισμός σφαλμάτωνCLASS. Η πρώτη παράμετρος εισόδου είναι η συνθήκη για την αξιολόγηση τηςWriteLineIfΗ μέθοδος. Η δεύτερη παράμετρος τηςWriteLineIfείναι το μήνυμα που εμφανίζεται μόνο αν η συνθήκη στην πρώτη παράμετρο αποτιμάται ως αληθής.
    Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
    Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
    
  11. Χρήση τουΔιεκδίκησηςη μέθοδος τουΟ εντοπισμός σφαλμάτωνclass so that the Output window displays the message only if a specified condition evaluates to false:
    Debug.Assert(dUnitCost > 1, "Message will NOT appear");
    Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");
    
  12. Create theTextWriterTraceListenerobjects for the Console window (tr1) and for a text file named Output.txt (tr2), and then add each object to theDebug Listenerscollection:
    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. For readability, use theUnindentmethod to remove the indentation for subsequent messages that theΟ εντοπισμός σφαλμάτωνη κλάση δημιουργεί. Όταν χρησιμοποιείτε τοIndentκαι τοUnindentmethods together, the reader can distinguish the output as group.
    Debug.Unindent();
    Debug.WriteLine("Debug Information-Product Ending");
  14. To make sure that eachListenerobject receives all its output, call theFlushmethod for theΟ εντοπισμός σφαλμάτωνclass buffers:
    Debug.Flush();

Using the Trace Class

Μπορείτε επίσης να χρησιμοποιήσετε τοΑνίχνευσηςclass to produce messages that monitor the execution of an application. Για ναΑνίχνευσηςANDΟ εντοπισμός σφαλμάτωνclasses share most of the same methods to produce output, including the following:
  • WriteLine
  • WriteLineIf
  • Indent
  • Unindent
  • Διεκδίκησης
  • Flush
Μπορείτε να χρησιμοποιήσετε τοΑνίχνευσηςκαι τοΟ εντοπισμός σφαλμάτωνclasses separately or together in the same application. In a Debug Solution Configuration project, bothΑνίχνευσηςANDΟ εντοπισμός σφαλμάτωνoutput are active. The project generates output from both of these classes to allListenerδύο διαστάσεων. However, a Release Solution Configuration project only generates output from aΑνίχνευσηςCLASS. The Release Solution Configuration project ignores anyΟ εντοπισμός σφαλμάτωνclass method invocations.
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. Βεβαιωθείτε ότι έχετεΟ εντοπισμός σφαλμάτωνis the current solution configuration.
  2. Αν υπάρχει ήδη ο φάκελοςΕξερεύνηση λύσηwindow is not visible, press the CTRL+ALT+L key combination to display this window.
  3. Κάντε δεξιό κλικ στο στοιχείοconInfo, και στη συνέχεια κάντε κλικ στο κουμπίΙδιότητες (Properties).
  4. In the left pane of the conInfo property page, under theΡΥΘΜΙΣΕΙΣ ΠΑΡΑΜΕΤΡΩΝfolder, make sure that the arrow points toDebugging.

    ΣΗΜΕΙΩΣΗIn Visual C# 2005 and in Visual C# 2005 Express Edition, clickΟ εντοπισμός σφαλμάτωνΣτοconInfoτου διαφημιζόμενου πελάτη Β.
  5. Πάνω από τοΡΥΘΜΙΣΕΙΣ ΠΑΡΑΜΕΤΡΩΝφάκελος, με τοΡΥΘΜΙΣΕΙΣ ΠΑΡΑΜΕΤΡΩΝπλαίσιο αναπτυσσόμενης λίστας, κάντε κλικ στο κουμπίΕνεργό (Εντοπισμός σφαλμάτων)ήΟ εντοπισμός σφαλμάτων, και στη συνέχεια κάντε κλικ στο κουμπίOk. Στη Visual C# 2005 και Visual C# 2005 Express Edition, κάντε κλικ στο κουμπίΕνεργό (εντοπισμός σφαλμάτων)ήΟ εντοπισμός σφαλμάτωνΣτοΡΥΘΜΙΣΕΙΣ ΠΑΡΑΜΕΤΡΩΝπλαίσιο αναπτυσσόμενης λίστας τουΟ εντοπισμός σφαλμάτωνσελίδα και στη συνέχεια κάντε κλικΑποθήκευση (Save)Στο διακομιστήFILEΜενού (Menu).
  6. Πιέστε τα πλήκτρα CTRL + ALT + O, για να εμφανίσετε το παράθυρο "Έξοδος".
  7. Πιέστε το πλήκτρο F5 για να εκτελέσετε τον κώδικα. Όταν τοΑποτυχία διεκδίκησηςεμφανίζεται το παράθυρο διαλόγου, κάντε κλικ στο κουμπίIGNORE.
  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 Projects\conInfo\bin στούντιο. Στη Visual C# 2005 και Visual C# 2005 Express Edition, το αρχείο Output.txt βρίσκεται στον ακόλουθο φάκελο:
C:\Documents and Settings\Σύνδεση χρήστη\My Documents\Visual 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λαμβάνει έξοδο από τοΑνίχνευσηςκαι τοΟ εντοπισμός σφαλμάτωνκλάσεις. Αυτό συμβαίνει ανεξάρτητα από το αν χρησιμοποιούν τοADDη μέθοδος τουΑνίχνευσηςή στοΟ εντοπισμός σφαλμάτωνΓια να προσθέσετε κλάσηςTextWriterTraceListenerΓια να τοListenersCLASS.
  • Εάν προσθέσετε έναListenersαντικείμενο για τον ίδιο προορισμό με τοΑνίχνευσηςκαι τοΟ εντοπισμός σφαλμάτωνκλάσεις, κάθε γραμμή εξόδου είναι διπλότυπο, ανεξάρτητα ανΟ εντοπισμός σφαλμάτωνήΑνίχνευσηςδημιουργεί το αποτέλεσμα.
             TextWriterTraceListener myWriter = new TextWriterTraceListener(System.Console.Out);
             Debug.Listeners.Add(myWriter);
            
             TextWriterTraceListener myCreator = new TextWriterTraceListener(System.Console.Out);
             Trace.Listeners.Add(myCreator);
             
    

Αναφορές

Για περισσότερες πληροφορίες, ανατρέξτε στα ακόλουθα θέματα με το .NET Framework Class Library τεκμηρίωση:
Ανίχνευση κλάσης
.aspx http://msdn2.Microsoft.com/en-us/library/System.Diagnostics.Trace (vs.71)

Εντοπισμός σφαλμάτων κλάσης
.aspx http://msdn2.Microsoft.com/en-us/library/System.Diagnostics.Debug (vs.71)

Ιδιότητες

Αναγν. άρθρου: 815788 - Τελευταία αναθεώρηση: Παρασκευή, 23 Σεπτεμβρίου 2011 - Αναθεώρηση: 3.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Λέξεις-κλειδιά: 
kbprogramming kbdebug kbnamespace kbhowtomaster kbmt KB815788 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:815788

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com